takesuma:
Me encuentro con un problema que no entiendo. En el método de añadir en la clase Tabla Me gustaría utilizar:
Arrays.binarySearch(asso, (a,b) -> a.cle.compareTo(b.cle));
Donde Asso es mi serie de los objetos de asociación que contiene la clave y el valor.
Mediante la ejecución de este código con el tipo String, me sale un error "no puede encontrar el símbolo" en el método compareTo (Objeto).
Allí mi código:
prueba:
Table<String,String> table0 = new Table<String,String>(10);
table0.add("1","int");
método:
import java.util.Arrays;
public class Table<C,V>{
Association[] asso;
public Table(int n){
asso = new Association[n];
}
public void add(C cle, V valeur){
asso[0] = new Association<C,V>(cle,valeur);
Arrays.sort(asso, (a,b) -> a.cle.compareTo(b.cle));
}
public class Association<C,V>{
public C cle;
public V valeur;
public Association(C cle,V valeur){
this.cle = cle;
this.valeur = valeur;
}
}
}
Y el error:
../src/Table.java:15: error: cannot find symbol
Arrays.sort(asso, (a,b) -> a.cle.compareTo(b.cle));
^
symbol: method compareTo(Object)
location: variable cle of type C
where C is a type-variable:
C extends Object declared in class Table.Association
Gracias por tu ayuda.
Eran :
Añadir un tipo ligado al parámetro de tipo genérico C
:
class Table<C extends Comparable<C>,V>
De lo contrario, el compilador no sabe que C
los implementos Comparable
(y por lo tanto debe tener el compareTo
método).
Asimismo, no utilizar el tipo de prima ( Association[]
) para la matriz. Utilizar:
Association<C,V>[] asso;
Pensándolo bien, pero pienso que deben tomar la Association
clase static
:
public class Table<C extends Comparable<C>,V> {
Association<C,V>[] asso;
public Table(int n) {
asso = new Association[n];
}
public void add(C cle, V valeur) {
asso[0] = new Association<C,V>(cle,valeur);
Arrays.sort(asso, (a,b) -> a.cle.compareTo(b.cle));
}
public static class Association<C,V> {
public C cle;
public V valeur;
public Association(C cle,V valeur){
this.cle = cle;
this.valeur = valeur;
}
}
}