动态设置agrument类型java

时间:2017-03-13 13:42:05

标签: java generics rx-java

我有一个为JavaRX创建简单Observer的方法,看起来像

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() {
        }
    };
}

如何在onNext方法中设置当前类型?我的意思是我希望有这样的东西

    @Override
    public void onNext(type value) {
    }

但这不起作用。

1 个答案:

答案 0 :(得分:3)

以下代码应该有效:

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,所以除了你知道{{1}你可能会收到。