2012-04-01 7 views
9

Pracuję nad projektem klasy, który obejmuje generycznych.Problem z generic Java: Błąd klasy "nie w granicach zmiennej typu".

public interface Keyable <T> {public String getKey();} 

public interface DataElement extends Comparable<Keyable<DataElement>>, Keyable<DataElement>, Serializable {...} 
public class Course implements DataElement {...} 


public interface SearchTree<K extends Comparable<Keyable<K>> & Keyable<K>> extends Serializable {...} 
public class MySearchTree implements SearchTree<Course> { 
... 
    private class Node { 
     public Course data; 
     public Node left; 
     public Node right; 
     ... 
    } 
} 

Gdy próbuje użyć klasy oczywiście w deklaracji MySearchTree, otrzymuję błąd typu argumentu stwierdzającego, że „oczywiście nie jest w granicach zmiennej typu K”. Spędziłem sporo czasu próbując dowiedzieć się, jakie atrybuty może brakować Kursowi, aby nie pasowały do ​​rachunku, ale pojawiły się puste.

Wszelkie pomysły?

Odpowiedz

11

W modelu MySearchTree typem podstawowym jest Course. Tak więc K musi "przedłużyć" Comparable<Keyable<Course>> & Keyable<Course>. Ale tak nie jest, rozszerza się o Comparable<Keyable<DataElement>> & Keyable<DataElement>.

Chyba DataElement należy generified w sposób podobny do Comparable lub Enum.

public interface Keyable <T> {public String getKey();} 

public interface DataElement<THIS extends DataElement<THIS>> extends Comparable<Keyable<THIS>>, Keyable<THIS>, Serializable {...} 
public class Course implements DataElement<Course> {...} 


public interface SearchTree<K extends Comparable<Keyable<K>> & Keyable<K>> extends Serializable {...} 
public class MySearchTree implements SearchTree<Course> { 
+1

Wow, dzięki za tonę. Właśnie uratowałeś mi warte godziny bóle głowy. – SamWN

Powiązane problemy