繁体   English   中英

类型转换为嵌套在通用 class 中的 class

[英]Type casting to a class nested inside a generic class

package LinkedList;

public class Linkedlist<T> {
    private int size;
    Node head;
    Node tail;

    public Linkedlist() {// default constructor
        size = 0;
        head = null;
        tail = null;
    }

    public class Node {// Node class
        T data;// current node data
        Node next;// reference to next node
        Node prev;// reference to previous node

        public Node(T data) {// def constructor
            this.data = data;
            next = null;
            prev = null;
        }

        @Override // to check equality of two nodes
        public boolean equals(Object obj) {
            if (this == obj)// checks if both have same reference
                return true;
            if (obj == null ||this==null || this.getClass() != obj.getClass())
                return false;
            @SuppressWarnings("unchecked")//casting obj to node gives a unchecked cast warning.
            Node n=((Node)obj);
            if(!(this.data==n.data))
                return false;
            return true; 
        }

在上面的代码中,我有一个通用的 class 链表,它嵌套了一个节点 class。代码的功能非常明显,我正在尝试创建一个双向链表。

问题是,在节点 class 中的等于 function 中,我将 object obj 类型转换为一个节点,该节点给出了我目前已抑制的未经检查的转换警告。 Visual Studio Code 自动生成的 equals function 给出了同样的警告。 我知道这个警告一定意味着我的代码在运行时可能会以某种方式中断,但我不知道如何中断,而且我是 generics 和一般编程的新手。 有什么办法可以解决此警告?

您可以使用它来避免强制转换警告

if (!(obj instanceof LinkedList<?>.Node)) return false;
LinkedList<?>.Node node = (LinkedList<?>.Node) obj;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM