Hier ist ein Beispiel mit minimalem Code. Die Schnittstelle:Instanziieren Sie eine generische Java-Klasse in einer generischen Klasse
interface Individual<T> {
public T getVariableValue(int index) ;
public void setVariableValue(int index, T value) ;
public int getNumberOfVariables() ;
public int getNumberOfObjectives() ;
public Individual<T> copy() ;
}
Und die Klasse:
public class minimalExample<S extends Individual> {
private List<S> doCrossover(List<S> s){
S mom = s.get(0);
S dad = s.get(1);
int crossoverPoint = 5;
S girl = mom.copy();
S boy = dad.copy();
for (int i = 0; i < mom.getNumberOfVariables(); i++) {
if(i > crossoverPoint){
boy.setVariableValue(i, mom.getVariableValue(i));
girl.setVariableValue(i,dad.getVariableValue(i));
}
}
return s;
}
}
Wenn ich versuche, dies zu kompilieren, erhalte ich:
java: incompatible types: Individual cannot be converted to S
Welche verwirrend scheint. Bedeutet das Schlüsselwort extends
, dass S vom Typ Individuell oder Untertyp sein muss?
Ihre Kopiermethode hat einen Rückgabetyp T nicht S. Ich frage mich, Sie müssen es nicht zu gieße S –