抽象クラスのサブクラスがたくさんあり、それぞれが同じ名前の public static final フィールドを宣言しています。このフィールドを初期化せずに抽象スーパークラスに配置し、各サブクラスが強制的に初期化されることを期待していました。
抽象クラスのすべてのサブクラスが UNIQUE_ID と呼ばれる public static final String フィールドを宣言し、すべてのサブクラスがそのようなフィールドを正確にその名前で宣言する必要があるため、これを考えていました。
私の質問が十分に明確であることを願っています。そうでない場合は、教えてください。
これと多かれ少なかれ同等のことを行うことはできますか?
編集:コードが追加されました:
私の抽象クラスは次のようになります。
public abstract class ExperimentPanelModel extends Panelizable {
protected String nextButtonText;
protected String backButtonText;
protected String skipButtonText;
protected Properties currentFile;
protected List<Properties> pastFiles = new ArrayList<Properties>();
public ExperimentPanelModel(Properties argcurrentfile, List<Properties> argpastfiles) {
currentFile = argcurrentfile;
pastFiles = argpastfiles;
nextButtonText = "Next";
backButtonText = "Back";
skipButtonText = "Skip";
}
...
}
その抽象クラスの非抽象サブクラスのいくつかは次のようになります (それらすべてが を宣言していることに注意してくださいpublic static final String UNIQUE_ID
)。
public class ConfigurationGUI extends ExperimentPanelModel {
public static final String UNIQUE_ID = "ConfigurationGUI";
public static final String DATA_MODIFIED = "DataModified";
Date dateOfLastSession;
int ExperimentalSession;
int ExperimentOrder;
boolean nextButtonEnabled = false;
public ConfigurationGUI(Properties argcurrentfile, List<Properties> argpastfiles) {
super(argcurrentfile, argpastfiles);
nextButtonText = "Confirm";
backButtonText = "Abort";
}
...
}
もう1つの例:
public class Introduction extends ExperimentPanelModel {
public static final String UNIQUE_ID = "Introduction";
public static final String INSTRUCTIONS_XML_FILE = "instructions.xml";
public static final String THIS_INSTRUCTION_PROPERTY = UNIQUE_ID;
private String thisInstructionText = UNIQUE_ID;
Properties readInstructionsProperties = new Properties();
public Introduction(Properties argcurrentfile, List<Properties> argpastfiles) {
...
そして最後のもの:
public class Instruction1 extends ExperimentPanelModel {
public static final String UNIQUE_ID = "Instruction1";
public static final String INSTRUCTIONS_XML_FILE = "instructions.xml";
public static final String THIS_INSTRUCTION_PROPERTY = UNIQUE_ID;
...
}