2016-04-17 15 views
0

Die abstrakte Methode getNextNode generiert den Fehler "kann keinen statischen Verweis auf den nicht statischen Knoten erstellen", aber nur, wenn LinkedList parametrisiert ist. Wenn ich das generische von LinkedList entferne, verschwindet der Fehler. Warum?Innere Schnittstelle erzeugt nur Fehler, wenn äußere Klasse parametrisiert ist? Warum?

public class LinkedList<T> { 
    Node head; 
    public LinkedList() { 
     head = new Node(); 
    } 
    private class Node { 

    } 

    interface stuff { 
     public Node getNextNode();//ERROR Cannot make a static reference to the non-static type Node 
    } 
} 
+0

Verwandte http://stackoverflow.com/q/5402869/1743880 – Tunaki

Antwort

2

Da der Fehler versucht, Ihnen zu sagen, können Sie einen generischen Typ ohne seinen Parameter nicht verwenden.

Node ist eigentlich LinkedList<T>.Node. Da Ihre Schnittstelle nicht generisch ist (Schnittstellen erben keine Typparameter von der enthaltenden Klasse), gibt es keine T, die sie ersetzen kann.

Sie können dies beheben, indem Sie die Node Klasse static Klasse static, so dass es den Typ Parameter nicht von seiner enthaltenen Klasse erbt.
Allerdings möchten Sie das eigentlich nicht tun, da die Node generisch sein sollte.

Sie müssen Ihre Schnittstelle auch generisch machen, damit sie eine T angeben kann.

+0

Keine Ahnung, warum dieses Downvoted wurde. –

+0

Das hat es erklärt, danke. –

0

Die Node kurz für LinkedList<T>.Node und Ihre getNextNode() weiß nicht, was T ist.

0
interface can't be defined in an inner class 


    http://www.xyzws.com/javafaq/why-an-interface-cant-be-defined-in-an-inner-class/56 

public class Test{ 
interface stuff { 
     public LinkedList.Node getNextNode(); 
    } 
    public class LinkedList<T> { 
     Node head; 

     public LinkedList() { 
      head = new Node(); 
     } 
     private class Node { 

     } 
}