来自《Effective Java Second Edition》第 28 条:“不要使用通配符类型作为返回类型。这不会为用户提供额外的灵活性,而是会迫使他们在客户端代码中使用通配符类型。”
public final Class<? super T> getRawType()
我刚刚开始掌握通用通配符,以了解我正在编写的一段代码中最后一个未经检查的强制转换警告,但我不明白为什么 getRawType() 返回通配符类型。
class Base<T>{}
class Child<T> extends Base<T>{}
public <C> void test (TypeToken<? extends Base<C>> token) {
Class<? extends Base<C>> rawType = (Class<? extends Base<C>>) token.getRawType();
}
我必须强制转换 token.getRawType() 因为它返回
Class<? super ? extends Base<C>>
如果你有一个怎么办TypeToken<ArrayList<String>>
你想要得到Class<ArrayList>
(that is原始类型)。如果它回来了Class<T>
,那么它会返回Class<ArrayList<String>>
这不是Class<ArrayList>
你要的那个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)