我正在研究遗传算法,我希望它尽可能抽象以便能够重用 GA。我定义并实现了一个 Population Interface,它运行良好,但我确信这不是最好的方法。我对 Java 泛型没有很好的经验。是否有更简单的方法来定义和实现 Population 接口(interface)(例如,可能避免强制转换?避免在 getChromosomes() 中使用新列表?)
public interface Population
{
void addChromosomes(List<? extends Chromosome> chromosomes);
List<Chromosome> getChromosomes();
// More code here ...
}
public class TSPPopulation implements Population
{
private List<TSPChromosome> chromosomes;
@Override
public void addChromosomes(List<? extends Chromosome> chromosomes) {
for (Chromosome chromosome : chromosomes) {
this.chromosomes.add((TSPChromosome) chromosome);
}
}
@Override
public List<Chromosome> getChromosomes() {
List<Chromosome> newList = new ArrayList<Chromosome>();
for (TSPChromosome chromosome : chromosomes) {
newList.add(chromosome);
}
return newList;
}
}
最佳答案
在您的界面中使用有界通配符:
public interface Population<T extends Chromosome>{
void addChromosomes(List<T> chromosomes);
List<T> getChromosomes();
}
public class TSPPopulation implements Population<TSPChromosome>
{
private List<TSPChromosome> chromosomes;
@Override
public void addChromosomes(List<TSPChromosome> chromosomes) {
...
}
@Override
public List<TSPChromosome> getChromosomes() {
...
}
}
关于java - 如何以更简单的方式使用泛型定义/实现此接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304322/