2016-09-18 6 views
0

Ich habe den folgenden Code in dem Typ T Vergleichbar erstreckt, aber ich habe einen Compiler-Fehler, wenn ich versuchegenerischer Typ Anwendungsbereich gilt nicht für innere Klasse?

root.node.compareTo (min) zu tun.

Sagen compareTo gilt nicht. Es scheint, dass der allgemeine Geltungsbereich nicht für die innere Klasse gilt.

public class Tree<T extends Comparable> { 
    public class Node<T>{ 
     private T node; 
     private Node<T> left; 
     private Node<T> right; 
     public Node(T node, Node<T> left, Node<T> right) { 
      super(); 
      this.node = node; 
      this.left = left; 
      this.right = right; 
     }  
    } 
    public boolean isBalanced(Node<T> root){ 
     return isBalanced(root, Integer.MIN, Integer.MAX); 
    } 
    private boolean isBalanced(Node<T> root, T min, T max){ 
     if(root == null){ 
      return true; 
     } 
     if(root.node.compareTo(min) < 0 || root.node.compareTo(max) > 0){ 
      return false; 
     } 
     return isBalanced(root.left, min, root.node) || isBalanced(root.right, root.node, max); 
    } 
} 

Antwort

2

Wenn Sie public class Node<T> sagen, du bist die <T> von der äußeren Klasse Shadowing. Sie sollten entweder <T> aus der inneren Klassendeklaration entfernen oder, besser, machen Sie die innere Klasse zu einer statischen geschachtelten Klasse (da es keinen Grund gibt, warum der Knoten wissen muss, an welcher Baumstruktur er angehängt ist).

(Anmerkung: Auch <T extends Comparable<T>> verwenden.)

+0

"(Anmerkung: Verwenden Sie auch erweitert>)" oder besser '>' – newacct

Verwandte Themen