【Java】带有泛型的方法指定泛型类型

一般来说遇不到这种情况,但是还是记录一下。一般形式如下:

        Observable.<String>create()
        // ...

也就是调用方法前的句点 . 之后紧跟泛型类型。这既可以是静态方法,也可以是对象方法,形式都相同。如果调用的是当前对象内的方法,需要在前面加上 this。如:

    public void foo() {
        View view = this.<View>findViewById(0);
    }

    public <T> T findViewById(int id) {}

这个情况是在使用 RxJava 的时候遇到的。当使用 Observable.create 方法创建一个对象时,后续无法获取到这个泛型,且无法利用强制转换。

Observable.create(emitter -> {
    emitter.onNext("");
})
.map(s -> {
    return s.length(); // × 这里无法自动判断对象的类型
})

需要改为:

Observable.<String>create(emitter -> {
    emitter.onNext("");
})
.map(s -> {
    return s.length(); // √
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容