为什么我在这段代码中遇到编译器错误?我如何解决它 ?
public class Container<T> {
private T content;
private T defaultValue;
public <T> Container(T defaultValue){
//Compiler error - incompatible types: T cannot be converted to T.
this.defaultValue = defaultValue;
}
}
类型擦除后,T defaultValue
会成为Object defaultValue
。那为什么我们不能分配T defaultValue
to Object defaultValue
?毕竟,Java 中的每种类型都是一个对象。
去除<T>
从构造函数前面。 Java 认为您正在尝试创建一个新的泛型。它认为类语句中的 T 与构造函数中的 T 不同。在 Java 眼中,有 T1 和 T2。您正在尝试将 T2 分配给 T1 变量。尽管它们在方法、继承等方面可能相同……但它们是两个不同的泛型。
这就是 Java 解释您所写内容的方式。
public class Container<T1> {
private T1 content;
private T1 defaultValue;
public <T2> Container(T2 defaultValue){
//Compiler error - incompatible types: T cannot be converted to T.
this.defaultValue = defaultValue;
}
}
你本来想写的是这个。您不需要在 内的任何地方指定 T,因为它包含在类语法中。
public class Container<T> {
private T content;
private T defaultValue;
public Container(T defaultValue){
this.defaultValue = defaultValue;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)