У меня есть много подклассов абстрактного класса, и каждый из них объявляет публичное статическое конечное поле с тем же именем. Я думал о том, что это поле в абстрактном суперклассе не инициализируется и надеется, что каждый подкласс будет вынужден инициализировать его.public static final field в абстрактном классе или интерфейсе
Я думал об этом, потому что все мои подклассы абстрактного класса объявляют публичное статическое конечное поле String под названием UNIQUE_ID, и для каждого подкласса необходимо указать такое поле с таким именем.
Надеюсь, мой вопрос достаточно ясен, если не скажите, пожалуйста.
Может ли быть что-то более или менее эквивалентное этому?
EDIT: Код добавлен:
Мой абстрактный класс выглядит следующим образом:
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";
}
...
}
Один пример больше:
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;
...
}
Пожалуйста, добавьте фрагменты кода, чтобы уточнить этот вопрос! – ppeterka
post какой-либо код пожалуйста –
надежда мой ответ был полезный. не уверен, что есть быстрое исправление, которое лучше, чем текущая реализация. в конечном счете, отходит от статических полей к отдельной структуре данных, которая может отслеживать метаданные. –