Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态设置图形类型java_Java_Generics_Rx Java - Fatal编程技术网

动态设置图形类型java

动态设置图形类型java,java,generics,rx-java,Java,Generics,Rx Java,我有一个为JavaRX创建简单观察者的方法 protected Observer observer; protected <T> void createObserver(Class<T> type) { observer = new Observer() { @Override public void onSubscribe(Disposable d) { } @Override

我有一个为JavaRX创建简单观察者的方法

protected Observer observer;

protected <T> void createObserver(Class<T> type) {
    observer = new Observer() {
        @Override
        public void onSubscribe(Disposable d) {
        }

        @Override
        public void onNext(Object value) {
        }

        @Override
        public void onError(Throwable e) {
        }

        @Override
        public void onComplete() {
        }
    };
}

但是这不起作用。

以下代码应该可以工作:

protected <T> void createObserver(Class<T> type) {
    observer = new Observer<T>() { // <-- It's possible to assign types with  arbitrary type arguments to a raw type.
        @Override
        public void onSubscribe(Disposable d) {
        }

        @Override
        public void onNext(T value) { // <-- Now it's legal
        }

        @Override
        public void onError(Throwable e) {
        }

        @Override
        public void onComplete() {
        }
    };
}

但是,不会有太大区别,因为您完全不知道t可能是什么,实际上它只是java.lang.Object,除非您知道可能会收到什么值。

您的意思是您知道可能的值类型并希望执行某些特定于类型的操作,还是只希望它是由类型变量T表示的类型。@glee8e,我在createObserver方法中将值的类型设为参数。所以我想让类I的对象设置为答案,但我知道我不能做我想做的事情,因为java不允许。无论如何,谢谢。观察者字段必须是类型为“观察者”的字段,这使得它毫无用处。
protected <T> void createObserver(Class<T> type) {
    observer = new Observer<T>() { // <-- It's possible to assign types with  arbitrary type arguments to a raw type.
        @Override
        public void onSubscribe(Disposable d) {
        }

        @Override
        public void onNext(T value) { // <-- Now it's legal
        }

        @Override
        public void onError(Throwable e) {
        }

        @Override
        public void onComplete() {
        }
    };
}