2 回答
TA贡献1801条经验 获得超16个赞
你面临的问题其实很简单。基本上,您需要了解泛型方法完全独立于泛型类。
public <T> void setData(T d) {
this.data = d;
}
public <T> void setNext(SinglyLinkedNode<T> n) {
this.next = n;
}
当您<T>在方法的修饰符中放置 a 时,您将使其成为通用方法。你的泛型方法中的类型 T 是不同的,并且覆盖了整个类的类型 T,这意味着你可以输入任何类型的对象,该方法将使用它作为其局部 T 值,这可以与全局完全不同类型 T。
<T>从您的方法修饰符中删除将使它们成为常规的 setter 方法并默认为类类型 T,它保证与所需的类型匹配。
TA贡献1757条经验 获得超8个赞
您不需要在 setter 上使用泛型,因为它将处理与类正在处理的相同类型的数据。所以,你的代码会是这样的:
public class SinglyLinkedNode<T> {
private T data;
private SinglyLinkedNode<T> next;
SinglyLinkedNode(T d) {
this.data = d;
this.next = null;
}
public void setData(T d) {
this.data = d;
}
//...
public void setNext(SinglyLinkedNode<T> n) {
this.next = n;
}
//...
}
所以现在您可以创建 SinglyLinkedNode 的实例并将值设置为:
public static void main(String[] args) {
SinglyLinkedNode<Integer> integers = new SinglyLinkedNode<>(2);
//
}
另外,我会摆脱 setter,因为我已经有一个构造函数来设置值。
添加回答
举报