如何以更简单的方式使用泛型定义/实现此接口?

Dav*_*les 1 java

我正在使用遗传算法,我希望它尽可能抽象,以便能够重用GA.我定义并实现了一个人口界面,它很有效,但我确信这不是最好的方法.我没有Java Generics的丰富经验.有没有更简单的方法来定义和实现Population接口(例如,可能避免强制转换?避免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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ral*_*lph 7

在界面中使用有界通配符:

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() {
...    
    }

}
Run Code Online (Sandbox Code Playgroud)