首页 / JAVA / java – 泛型编译错误
java – 泛型编译错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 泛型编译错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1839字,纯文字阅读大概需要3分钟。
内容图文
![java – 泛型编译错误](/upload/InfoBanner/zyjiaocheng/808/ba09306de2e645cba60cb8d4bf02f95c.jpg)
test1和test2之间的区别在哪里?
为什么test1中的编译错误?
import java.util.ArrayList;
import java.util.Collection;
class MyType {
}
class MyClass<T> {
private Collection<MyType> myTypes = new ArrayList<MyType>();
private Collection<T> myTs = new ArrayList<T>();
public Collection<MyType> getMyTypes() {
return myTypes;
}
public Collection<T> getMyTs() {
return myTs;
}
}
public class TestSimple {
public void test1() {
MyClass myClass = new MyClass();
for (MyType myType : myClass.getMyTypes()) {
}
}
public void test2() {
MyClass myClass = new MyClass();
Collection<MyType> myTypes = myClass.getMyTypes();
for (MyType myType : myTypes) {
}
}
public void test3() {
MyClass<Long> myClass = new MyClass<Long>();
for (Long myType : myClass.getMyTs()) {
}
}
}
解决方法:
如果你在一个类上定义一个泛型约束,然后在没有提供任何通用约束的情况下实例化该类(也就是说,你完全不使用<>),那么你刚刚进入了Raw Types的领域,那里什么都没有同样的.
The use of raw types is allowed only as a concession to compatibility of legacy code. The use of raw types in code written after the introduction of genericity into the Java programming language is strongly discouraged. It is possible that future versions of the Java programming language will disallow the use of raw types.
根据Angelika Langer的优秀Java Generics FAQ,
Methods or constructors of a raw type have the signature that they would have after type erasure. A method or constructor call to a raw type generates an unchecked warning if the erasure changes the argument types.
因此,通过将MyClass构造为原始类型(即,作为MyClass而不是MyClass<?>),您完全退出了泛型,并且getMyTypes()的返回类型现在是原始类型Collection,而不是Collection< MyType的取代.因此,您不能使用类型为MyType的增强型语法,而是必须使用Object. 当然,更好的解决方案就是使用MyClass<?> (而不仅仅是MyClass)当你指的是未知参数化类型的MyClass时.
内容总结
以上是互联网集市为您收集整理的java – 泛型编译错误全部内容,希望文章能够帮你解决java – 泛型编译错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。