如何让参数化构造函数中的派生 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
*/
}
}
我有一个 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
*/
}
}