2017-12-01 33 views
1

ich immer noch versuchen, lerne und derzeit DoublyLinkedLists mit verschachtelten STATIC Klassen und immer den Fehler unten zu implementieren:Kein umschließenden Instanz des Typs OuterClass.StaticNestedClass ist zugänglich in Umfang

No enclosing instance of the type OuterClass.StaticNestedClass is accessible in scope tatsächliche Fehler:
No enclosing instance of the type SolutionDLL.Node is accessible in scope

ich habe zwei STATIC verschachtelte Klassen innerhalb der äußeren Klasse SolutionDLL Klasse:

class SolutionDLL { 
    public static class Node { 
     private Object element; 
     private Node next; 
     private Node previous; 

     Node(Object elementIn, Node nextNodeIn, Node prevNodeIn) { 
      element = elementIn; 
      next = nextNodeIn; 
      previous = prevNodeIn; 
     } 

     public Object getElement() { 
      return element; 
     } 

     public Node getNext() { 
      return next; 
     } 

     public Node getPrevious() { 
      return previous; 
     } 

    } 

    public static class DLList { 
     public void addFirst(Node n) { 
      SolutionDLL.Node tempNode = new SolutionDLL.Node(
       SolutionDLL.Node.this.getElement(), 
       SolutionDLL.Node.this.getNext(), 
       SolutionDLL.Node.this.getPrevious()); 
      // do something 
     } 
    } 
} 

Egal, ob ich so nennen:
SolutionDLL.Node.this.getElement()
von wie folgt aus:
Node.this.getElement()

ich noch die Störung. Ich hatte den Skelett-Code gegeben und dies ist das erste Mal, dass ich mit verschachtelten Klassen umsetze. So würde jede Hilfe gut geschätzt werden. Danke!

+0

Die Syntax, die Sie nur mit inneren Klassen arbeitet verwenden. Hier gibt es keine inneren Klassen. – EJP

Antwort

0

SolutionDLL.Node, wie jede Klasse, nicht this Feld. this Feld ist nur innerhalb des Objekts und seiner inneren Klassen dieser Objektklasse verfügbar.

ändern addFirst die Werte fomr n Knoten statt zu bekommen:

public static class DLList { 
    private Node firstNode = null; 

    public void addFirst(Node n) { 

     //do something with the first node before it is assigned to the n 
     if (firstNode != null){ 
      SolutionDLL.Node tempNode = new SolutionDLL.Node(
      firstNode.getElement(), 
      firstNode.getNext(), 
      firstNode.getPrevious()); 
     } 
     firstNode = n; 
     // do something 
    } 
} 
+0

Aber das Problem ist, dass ich den ursprünglichen FirstNode durch den in der Methode übergebenen Knoten ersetzen möchte, deshalb habe ich versucht, es so zu machen. Wie greife ich dann auf den ursprünglichen Knoten zu? Ich muss irgendwie auf den vorherigen FirstNode zugreifen, bevor ich ihn durch das 'n' in der Methode ersetze. – WannaBeForNow

+0

Die Methode wird auf DLList und nicht auf dem Knoten selbst aufgerufen. Sie behalten keinen Verweis auf den ersten Knoten. Sie müssen es Begriffe von Objekten und nicht Klassen denken. Sehen Sie meinen aktualisierten Code, der Ihr Problem hoffentlich beantwortet. – tsolakp

+0

Oh okay, ich sehe, ich werde es dann so versuchen. Vielen Dank! :) – WannaBeForNow

Verwandte Themen