2017-07-21 6 views
1

Wenn ich statische geschachtelte Klasse verwenden, bekomme ich die Warnung The type parameter T is hiding the type T nicht. Wenn ich jedoch die nicht-statische geschachtelte Klasse verwende, bekomme ich die Warnung.statische/nicht statische innere Klasse: Der Typ-Parameter T versteckt den Typ T

public class CustomStack<T> { 
    private class CustomNode<T>{ 
     private T data; 
     private CustomNode<T> next; 

     public CustomNode(T data){ 
      this.data = data; 
     } 

    } 
} 

ich wissen will, warum nicht ich erhalten diese Warnung, wenn ich statische geschachtelte Klasse verwenden?

Antwort

2

Innere Klassen haben einen Verweis auf ihre enthaltene Klasse. Durch diese Referenz kann die innere Klasse den in der äußeren Klasse definierten Wert T verwenden. Zum Beispiel diese kompiliert:

public class CustomStack<T> { 
    private class CustomNode { 
     private T data; 
     private CustomNode next; 

     public CustomNode(T data) { 
     this.data = data; 
     } 
    } 
    } 

Wenn Sie die innere Klasse machen static, es nicht mehr die T in der äußeren Klasse definiert verwenden kann, ist es nicht kompiliert werden.

In Ihrem geposteten Code definiert der T Parameter der inneren Klasse die T der äußeren Klasse neu. Das ist verwirrend, weil ein Leser denken könnte, dass T dasselbe in der Datei bedeutet, aber nicht. Wenn innerhalb der inneren Klasse verwendet wird es etwas anderes bedeuten.

Wenn Sie die innere Klasse machen wollen, müssen sie eigene Typ-Parameter ist, dann sollten Sie es zum Beispiel anders nennen:

public class CustomStack<T> { 
    private class CustomNode<U> { 
     private U data; 
     private CustomNode<U> next; 

     public CustomNode(U data) { 
      this.data = data; 
     } 
    } 
} 
+0

Verstanden, danke !! –

+0

@JohnRambo gut bearbeiten, danke! – janos

0

Der Typparameter T zu parametrieren verwendet wird Instanzen (die Redundanz beachten) von deiner äußeren Klasse. Innere Klassen sind an eine Instanz gebunden, daher die Warnung. Statische innere Klassen im Gegensatz, sind nicht an eine bestimmte Instanz gebunden. Statisch bedeutet, dass Ihre innere Klasse grundsätzlich unabhängig von den deklarierten Instanzen ist.

Verwandte Themen