gpt4 book ai didi

Java 泛型 - 为什么构造函数中的这个赋值是非法的?

转载 作者:行者123 更新时间:2023-12-02 17:15:30 24 4
gpt4 key购买 nike

为什么我在这段代码中遇到编译器错误?我该如何修复它?

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 分配给 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;
}
}

关于Java 泛型 - 为什么构造函数中的这个赋值是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61072166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com