Java 在ECJ中调用父级中的扩展类变量
我正在使用ECJ(一个进化算法包),我想调用扩展类中的某些变量,但我不知道如何从问题类中获取它们 正如您在下面的问题类中所看到的,我希望能够调用NetworkGene类中的变量x,但它不起作用,因为我最终进入VectorGene类,在该类中我只能调用变量yJava 在ECJ中调用父级中的扩展类变量,java,variables,parent-child,extends,Java,Variables,Parent Child,Extends,我正在使用ECJ(一个进化算法包),我想调用扩展类中的某些变量,但我不知道如何从问题类中获取它们 正如您在下面的问题类中所看到的,我希望能够调用NetworkGene类中的变量x,但它不起作用,因为我最终进入VectorGene类,在该类中我只能调用变量y class Problem { double fitness = 0; public void evaluate(final Individual ind){ if(!(ind. instanceOf GeneVectorIn
class Problem {
double fitness = 0;
public void evaluate(final Individual ind){
if(!(ind. instanceOf GeneVectorIndividual)){
state.output.fatal("Not a GeneVectorIndividual",null);
}
fitness = 0;
for(){
fitness += ind.genome[i].x;
}
}
}
public abstrabct class VectorIndividual extends Individual{
}
public class GeneVectorIndividual extends VectorIndividual{
VectorGene[] genome;
}
public abstract class VectorGene implements Prototype {
double y;
}
public class NetworkGene extends VectorGene{
double x;
}
经典多态性问题 快速而肮脏的解决方案是:在类
问题中的for
循环中,添加以下行
if (ind.genome[i] instanceof NetworkGene) {
fitness += ((NetworkGene) ind.genome[i]).x;
}
但可能有一个设计问题需要解决:
为什么ind.genome
是一组矢量基因而不是网络基因
x
代表什么?在VectorGene
中是否可以表达一些东西,比如getSomeValue()
方法,在NetworkGene
中可以实现该方法以返回x
(在其他子类中,可以实现该方法以返回其他适当的值)
你真的需要VectorGene
和NetworkGene
之间的继承关系吗?它是否与你目前试图解决的问题中实际需要利用的差异有关?难道你不能只拥有一个包含属性x
和y
的类吗?我使用的是一个标准包,他们选择使用很多继承关系,使程序适用于各种问题。VectorGene对象是包中的标准对象,NetworkGene对象是我制作的对象。这是他们手册中的标准方式。参数文件告诉程序使用NetworkGene对象。我发现整个程序非常混乱,我不确定所有东西是如何继承的,因为它的实现方式。啊,框架的乐趣。好的,在这种情况下,如果NetworkGene没有使用一些抽象方法进行设计,您可以实现,比如getFitness()
,那么除了我建议的快速而肮脏的解决方案之外,您没有什么可以做的了。即使我添加这个快速而肮脏的方法,我仍然会收到错误消息,即它找不到符号(x变量)。这些变量只是解释问题的傀儡。好吧,我通过向VectorGene和NetworkGene对象添加一个getFitness()方法解决了这个问题。谢谢。我以为你不能修改VectorGene,因为它是由框架提供的。