gpt4 book ai didi

java - 在 Java 中使用三角括号内的 "extends"和类型 "T"

转载 作者:行者123 更新时间:2023-12-01 10:01:46 24 4
gpt4 key购买 nike

作为一名 Java 初学者,我试图理解的部分代码如下:

public class StandardGA<T extends Chromosome> extends GeneticAlgorithm<T> {

private static final long serialVersionUID = 5043503777821916152L;

private final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(StandardGA.class);

/**
* Constructor
*
* @param factory a {@link org.evosuite.ga.ChromosomeFactory} object.
*/
public StandardGA(ChromosomeFactory<T> factory) {
super(factory);
}

/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
protected void evolve() {

List<T> newGeneration = new ArrayList<T>();

// Elitism
newGeneration.addAll(elitism());

// new_generation.size() < population_size
while (!isNextPopulationFull(newGeneration)) {

T parent1 = selectionFunction.select(population);
T parent2 = selectionFunction.select(population);

T offspring1 = (T)parent1.clone();
T offspring2 = (T)parent2.clone();

我不确定如何搜索我不明白的问题的答案,因为当我在网络上搜索答案时,我不确定如何调用它。如果你看一下这部分代码

public class StandardGA<T extends Chromosome> extends GeneticAlgorithm<T> {

<T extends Chromosome>它有三角括号,前面有“T”。我不确定如何以这种方式使用扩展,我认为 T 是一种类型,但也不明白它是什么或在哪里寻找它。

此外,将扩展为“遗传算法”的类放在旁边是什么意思。简单扩展Genetic Algorithms有什么区别与“Genetic Algorithms<T>”相反。

由于我的理解有限,我认为这个“T”是一种类型,因为在粘贴的代码下方您可以看到例如:

T parent1 = selectionFunction.select(population);

哪个将变量parent1设置为类型“T”?或者我错了,这部分代码正在尝试做其他事情?预先感谢您的任何答复。

最佳答案

这是一个界限。这意味着T需要是 Chromosome 的某种类型.

当您创建或声明 StandardGA 时,您必须指定一个类型,该类型必须是染色体。

示例:

StandardGA<XXY> myGA = new StandardGA<XXY>();

这里又是关于有界类型的链接。 https://docs.oracle.com/javase/tutorial/java/generics/bounded.html

GeneticAlgorithm<T>意味着GeneticAlgorithm本身是用类型参数声明的。

 public class GeneticAlgorithm<T> {  ...

否则 T将是一个语法错误。您应该阅读有关泛型的内容,它会对您有很大帮助。

关于java - 在 Java 中使用三角括号内的 "extends"和类型 "T",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36759417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com