Java中未选中的Cast警告?

时间:2013-06-20 14:42:42

标签: java

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

1 个答案:

答案 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;

你不会收到警告。

然而,我的蜘蛛意识告诉我那里存在一些建筑问题。由于您没有向我们展示您的所有代码,我们无法再为您提供帮助。