首页 / JAVA / java – 泛型类列表的奇怪错误
java – 泛型类列表的奇怪错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 泛型类列表的奇怪错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1262字,纯文字阅读大概需要2分钟。
内容图文
![java – 泛型类列表的奇怪错误](/upload/InfoBanner/zyjiaocheng/773/1b9a61c493a4439aa336160cf0853fe7.jpg)
我有一个Class对象列表,所有这些对象都需要扩展一个泛型类.这是我的代码:
private final List<Class<? extends A<?>>> CLASS_LIST =
Arrays.asList(B.class, C.class, D.class);
// Base class
private abstract class A<T extends Object> {}
// Some class that extends A
private class B extends A<String> {}
// Some other class that extends A
private class C extends A<String> {}
// A class that extends A, but with a different type than the first two
private class D extends A<OtherClass> {}
private static class OtherClass {}
这工作正常,但如果我从列表中删除D.class我得到一个错误说:
Incompatible types, Required A<?>, found A<String>
为什么会这样?我假设Java推断出类型……但为什么呢?它有办法吗?我发现如果我使用List<?>它适用于所有情况,但后来我失去了类型安全.
编辑:
另外,如果我有这个方法:
private void Check(){
A a = new B();
if(CLASS_LIST.contains(a.getClass())){
// Do something
}
}
它给了我一个对List.contains(…)的可疑调用的警告.但是,如果我使用List<?>,则警告会消失….为什么会这样?
EDIT2:
Java 1.8.0_51-b16编译,但Java 1.7.0_79给出了错误.
解决方法:
当你写作时,你是对的
Arrays.asList(B.class, C.class)
编译器(1.7,1.8在类型推断方面稍微好一点)推断出一种类<?扩展A< String>>从它的参数,它与赋值不兼容.您可以通过指定所需的类型来解决此问题:
Arrays.<Class<? extends A<?>>>asList(B.class, C.class)
内容总结
以上是互联网集市为您收集整理的java – 泛型类列表的奇怪错误全部内容,希望文章能够帮你解决java – 泛型类列表的奇怪错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。