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

标签 java

我正在研究遗传算法,我希望它尽可能抽象以便能够重用 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/

相关文章:

java - Java 中的 ResultSet 可以是 'null' 吗?

java - java有编译时绑定(bind)吗?

java - 在运行时加载 jar

java - 组、收集器、映射(整数到字符串)、映射(映射到对象)

java - 如何使其成为更简单的代码(Java,简单的字符串输入,说明它是否正确)

java - 难以理解关闭 Hook 何时执行以及如何终止 ExecutorService

java - 我可以忽略 ObjectMapper 中的 MismatchedInputException 吗?

Java - 混合数组列表?

java - RabbitListener 不会接收使用 AsyncRabbitTemplate 发送的每条消息

java - 简单的二维随机游走