2012-04-01 16 views
9

Estoy trabajando en un proyecto para la clase que involucra genéricos.Problema de genéricos de Java: Clase "error de límites de tipo de variable".

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; 
     ... 
    } 
} 

Al intentar utilizar la clase de golf dentro de la declaración de MySearchTree, recibo un error de tipo de argumento que indica que "Por supuesto que no está dentro de los límites del tipo K-variable". Pasé una buena cantidad de tiempo tratando de averiguar qué atributos podría faltar en el curso para que no se ajuste a la factura, pero salió vacío.

¿Alguna idea?

Respuesta

11

En MySearchTree el K del tipo base es Course. Por lo tanto, K debe "extender" Comparable<Keyable<Course>> & Keyable<Course>. Pero no lo hace, se extiende Comparable<Keyable<DataElement>> & Keyable<DataElement>.

supongo DataElement debe generified de una manera similar a Comparable o 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, gracias a ton. Me acabas de ahorrar horas de dolores de cabeza. – SamWN

Cuestiones relacionadas