我尝试理解为初学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>
有三角括号,&#34; T&#34;在它面前。我不确定如何以这种方式使用扩展,我认为T是一种类型,但也不了解它是什么或在哪里寻找它。
将类扩展到#34;遗传算法&#34;的旁边是什么意思。简单地扩展Genetic Algorithms
而不是&#34; Genetic Algorithms<T>
&#34;之间的区别是什么。
由于我的理解有限,我认为这是&#34; T&#34;是一种类型,因为您可以看到粘贴代码中的较低值,例如:
T parent1 = selectionFunction.select(population);
将变量parent1设置为&#34; T&#34;?或者我错了,这段代码试图做其他事情?提前感谢您的任何答案。
答案 0 :(得分:1)
这是一个约束。这意味着T
必须是某种类型的Chromosome
。
当您创建或声明StandardGA
时,您必须指定一个必须是Chromsome的类型。
示例:
StandardGA<XXY> myGA = new StandardGA<XXY>();
这里是有界类型的链接。 https://docs.oracle.com/javase/tutorial/java/generics/bounded.html
GeneticAlgorithm<T>
表示GeneticAlgorithm
本身是使用类型参数声明的。
public class GeneticAlgorithm<T> { ...
否则T
将是语法错误。你应该阅读泛型,它会帮助你很多。