Java中未选中的Cast警告?

her*_*y92 5 java

在这段代码中,我在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)

Ada*_*old 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

在使用该类的地方,您可以执行以下操作:

new Node<Item> // ...

你的代码将如下所示:

Node<Item> x = head, y = b.head;
Run Code Online (Sandbox Code Playgroud)

这样你就不会收到警告。

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