5

在这段代码中,我正在 java 中实现一个通用链表。

public class LL<Item extends Comparable<Item>> {

我的节点类定义为

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;
4

1 回答 1

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;

而且您不会以这种方式收到警告。

然而,我的蜘蛛感告诉我那里存在一些架构问题。由于您没有向我们展示您的所有代码,我们无法进一步帮助您。

于 2013-06-20T14:48:59.787 回答