Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ECJ中调用父级中的扩展类变量_Java_Variables_Parent Child_Extends - Fatal编程技术网

Java 在ECJ中调用父级中的扩展类变量

Java 在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

我正在使用ECJ(一个进化算法包),我想调用扩展类中的某些变量,但我不知道如何从问题类中获取它们

正如您在下面的问题类中所看到的,我希望能够调用NetworkGene类中的变量x,但它不起作用,因为我最终进入VectorGene类,在该类中我只能调用变量y

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,因为它是由框架提供的。