每天一个秃头小技巧

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

2022-02-08  本文已影响0人  littlefogcat

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

        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(); // √
})
上一篇 下一篇

猜你喜欢

热点阅读