如何让参数化构造函数中的派生 class 链访问使用派生构造函数初始化的基 class 的字段

How to let a derived class in a parameterized constructor chain access fields of the base class that are initialized using the derived constructor

我有一个 class 带有配置文件的参数化构造函数的前馈:

public Feedforward(String cfg) throws Exception {

    super(cfg);
    String tempstr = "";
    int currNeuronNum = 0;
    int currEdgeNum = 0;
    int currLayerID = 0;
    int count = 0;

    if (!(type).equals("feedforward")) {
       throw new Exception("cfgError: specify proper type")
    //more code
    }

其中 super(cfg) 调用网络的构造函数 class,我在这里处理通用字段的文件解析和存储:

protected Network(String cfgPath) throws IOException, Exception {

      String type;
      String activationFunction;
      double bias;
      /*file reading stuff; checked with print statements and during 
        the creation of a Feedforward class, successfully prints 
        "feedforward" after reading type from file
      */       
}

并且当我 运行 进行测试时,它会抛出 NullPointerException。 Feedforward 中的类型变量未分配存储在文件中 cfgPath/cfg 处的值,因此异常。为什么构造函数链不这样做,我该如何做不同的事情?

因为类型是方法的局部变量(在本例中为构造函数),虽然 Network 是一个超级 class 但我们无法访问它之外的任何方法的局部变量。

你可以让 String type="";作为侧构造函数外的变量,然后只需在侧网络构造函数中分配值。

您可以在前馈中使用它 class。

public class Network {
     String type="";
    protected Network(String cfgPath) throws IOException, Exception  {

         type=cfgPath;
          String activationFunction=cfgPath;
          double bias;
          /*file reading stuff; checked with print statements and during 
            the creation of a Feedforward class, successfully prints 
            "feedforward" after reading type from file
          */       
    }
}