Ich laufe in ein Problem, dass ich nicht verstehe. Bei dem Verfahren in der Tabelle Klasse der Zugabe würde ich gerne verwenden:
Arrays.binarySearch(asso, (a,b) -> a.cle.compareTo(b.cle));
Wo Asso ist mein Array of Association den Schlüssel und die Wertobjekte enthält.
Durch die Ausführung dieses Codes mit dem Typ String, erhalte ich einen Fehler auf der Methode compareTo (Object) „kann nicht Symbol finden“.
Es meinen Code:
Prüfung:
Table<String,String> table0 = new Table<String,String>(10);
table0.add("1","int");
Methode:
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;
}
}
}
Und der Fehler:
../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
Danke für deine Hilfe.
Fügen Sie einen Typ mit dem generischen Typparameter gebunden C
:
class Table<C extends Comparable<C>,V>
Andernfalls wird der Compiler nicht weiß , dass C
Geräte Comparable
(und deshalb müssen die haben compareTo
Methode).
Verwenden Sie auch nicht roh - Typ ( Association[]
) für das Array. Verwenden:
Association<C,V>[] asso;
Am zweiten Gedanken, empfehle ich Ihnen auch die machen Association
Klasse 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;
}
}
}