在这段代码中,我在java中实现了一个通用链表.
public class LL<Item extends Comparable<Item>> {
Run Code Online (Sandbox Code Playgroud)
我的Node类被定义为
private class Node{
private Item data;
private Node next;
public Node(Item data){
this.data = data;
next = null;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的疑问是,我在编码时不断收到警告
Node x = head, y = (Node) b.head;
Type safety: Unchecked cast from LL.Node to LL<Item>.Node
Run Code Online (Sandbox Code Playgroud)
我应该忽略这一点,为什么编译器会生成它.它有解决方法吗?
编辑:
b是LL类型,函数签名看起来像
public void mergeAlternate(LL b){
Run Code Online (Sandbox Code Playgroud)
head是LL类的私有实例变量
private Node head;
Run Code Online (Sandbox Code Playgroud)
如果您正在创建一个通用实现,那么它在内部也应该是通用的。
您缺少类的类型参数Node。它应该像这样通用:
private class Node<T extends Comparable<T>> {
private T data;
private Node<T> next;
public Node(T data){
this.data = data;
next = null;
}
}
Run Code Online (Sandbox Code Playgroud)
在使用该类的地方,您可以执行以下操作:
new Node<Item> // ...
你的代码将如下所示:
Node<Item> x = head, y = b.head;
Run Code Online (Sandbox Code Playgroud)
这样你就不会收到警告。
然而,我的蜘蛛感应告诉我,那里存在一些架构问题。由于您没有向我们展示您的所有代码,我们无法为您提供进一步的帮助。
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |