Как разрешить производному классу в параметризованном конструкторе цепочку доступа к полям базового класса, которые инициализируются с использованием производного конструктора - PullRequest
0 голосов
/ 27 марта 2019

У меня есть класс Feedforward с параметризованным конструктором файла конфигурации:

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) вызывает конструктор класса Network, где я занимаюсь разбором файлов и хранением универсальных полей:

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, поэтому это исключение.Почему цепочка конструктора не делает этого, и как я могу делать вещи по-другому?

1 Ответ

0 голосов
/ 27 марта 2019

Поскольку тип - это локальная переменная метода (в данном случае конструктор), хотя Network является суперклассом, но мы не можем получить доступ к локальной переменной любого метода вне ее.

, вы можете сделать String type ="";как переменный внешний конструктор, затем просто присвойте значение в боковом конструкторе сети.

, и вы можете использовать его в классе Feedforward.

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
          */       
    }
}
...