【发布时间】:2022-11-03 21:28:23
【问题描述】:
我有以下类:Command、ParameterData 和 TestCommand。 Command 是一个抽象类,代表一个简单的对象。此类需要 ParameterData 对象的列表。反过来,ParameterData 也需要在其构造函数中使用 Command 类的实例。我想创建一个继承自Command的类,即TestCommand。问题出在:调用构造函数时,出现编译错误:“在调用超类型构造函数之前无法引用‘this’”。我不知道如何解决这个问题。我会很感激你的帮助。
命令类:
public abstract class Command {
private final String SETTINGS_PATH;
private final List<ParameterData> PARAMETERS;
public Command(String settingsPath, List<ParameterData> parameters) {
this.SETTINGS_PATH = settingsPath;
this.PARAMETERS = parameters;
}
public String getSettingsPath() {
return SETTINGS_PATH;
}
public abstract void run();
}
参数数据类:
public class ParameterData {
private final String SETTINGS_KEY;
private final Command COMMAND;
private final OptionType OPTION_TYPE;
private final boolean REQUIRED;
public ParameterData(String settingsKey, Command command, OptionType optionType, boolean required) {
this.SETTINGS_KEY = settingsKey;
this.COMMAND = command;
this.OPTION_TYPE = optionType;
this.REQUIRED = required;
}
public String getSettingsKey() {
return SETTINGS_KEY;
}
public String getSettingsPath() {
return COMMAND.getSettingsPath() + ".Parameters." + SETTINGS_KEY;
}
public OptionType getOptionType() {
return OPTION_TYPE;
}
public boolean isRequired() {
return REQUIRED;
}
}
TestCommand 类(“this”发生错误):
public class TestCommand extends Command {
public TestCommand() {
super("Settings.TestCommand",
List.of(new ParameterData("SettingsKey", this, OptionType.STRING, true)));
}
@Override
public void run() {
//do something
}
}
【问题讨论】:
-
从技术上讲,OP 不是将
this传递给超级构造函数,而是传递给ParameterData的构造函数。如果不在Command中使PARAMETERS成为非最终的,然后从子构造函数中设置它,我想不出解决这个问题的方法。
标签: java inheritance constructor