在这段代码中,我在java中实现了一个通用链表。
public class LL<Item extends Comparable<Item>> {
我的Node类定义为
private class Node{
private Item data;
private Node next;
public Node(Item data){
this.data = data;
next = null;
}
}
现在我的疑问是,我在编码时不断收到警告
Node x = head, y = (Node) b.head;
Type safety: Unchecked cast from LL.Node to LL<Item>.Node
我应该忽略这一点,为什么编译器会生成它。它有解决方法吗?
编辑:
b的类型为LL,函数签名类似于
public void mergeAlternate(LL b){
head是LL类的私有实例变量
private Node head;
答案 0 :(得分:3)
如果您正在创建一个通用实现,那么它也应该是内部通用的。
您缺少Node
课程的类型参数。它应该是通用的:
private class Node<T extends Comparable<T>> {
private T data;
private Node<T> next;
public Node(T data){
this.data = data;
next = null;
}
}
在使用该课程的地方,您可以这样做:
new Node<Item> // ...
您的代码将如下所示:
Node<Item> x = head, y = b.head;
你不会收到警告。
然而,我的蜘蛛意识告诉我那里存在一些建筑问题。由于您没有向我们展示您的所有代码,我们无法再为您提供帮助。