Heim >Java >Typkonflikt: Konvertierung von DLL.Node in DLL.Node nicht möglich

Typkonflikt: Konvertierung von DLL.Node in DLL.Node nicht möglich

王林
王林nach vorne
2024-02-22 13:10:10845Durchsuche

Eine Auswahl von Java-Fragen und Antworten des PHP-Editors Yuzi, heutige Frage: Typkonflikt: Konvertierung von DLL.Node in DLL.Node nicht möglich. Bei dem Problem handelt es sich in der Regel um Kompilierungsfehler, die durch das Löschen generischer Typen verursacht werden, und müssen durch Typkonvertierung oder Code-Neugestaltung behoben werden. In Java wird der tatsächliche Typ eines Generikums nach der Kompilierung gelöscht, was dazu führt, dass der Compiler den Typ nicht genau identifizieren kann. Durch das Verständnis des Prinzips der generischen Löschung und die flexible Verwendung der Typkonvertierung kann diese Art von Problem effektiv gelöst werden.

Frageninhalt

Ich versuche, eine doppelt verknüpfte Liste mit verschachtelten Knotenklassen zu implementieren. Aufgrund der generischen Natur der Klasse erhalte ich eine Fehlermeldung bezüglich der Typinkongruenz. Da es sich bei der verschachtelten Klasse nicht um eine statische Klasse handelt, dachte ich, sie würde den generischen Typoperator der obersten Klasse verwenden.

public class DLL <E> {
    
    public class Node<E>{
        private E element;
        private Node<E> prev;
        private Node<E> next;
        
        public <E> Node (E element, Node <E> prev, Node<E> next){
            this.element = element; // Error: Type mismatch: cannot convert from E to E
            this.prev = prev; // Error: Type mismatch: cannot convert from DLL<E>.Node<E> to DLL<E>.Node<E>
            this.next = next;// Error: Type mismatch: cannot convert from DLL<E>.Node<E> to DLL<E>.Node<E>
        }

Jede Hilfe wäre großartig!

Workaround

statt Neudeklaration des generischen Typs e。 node 构造函数应使用外部 dllca37468c879b0f5f3f64e26b1333f6f6 类中的泛型类型 e. Die Lösung lautet wie folgt:

public class DLL<E> {
    
    public class Node {
        private E element;
        private Node prev;
        private Node next;
        
        public Node(E element, Node prev, Node next) {
            this.element = element;
            this.prev = prev;
            this.next = next;
        }
    }

}

Das obige ist der detaillierte Inhalt vonTypkonflikt: Konvertierung von DLL.Node in DLL.Node nicht möglich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen