Mam wiele podklas klasy abstrakcyjnej, a każda z nich deklaruje publiczne, statyczne pole końcowe o tej samej nazwie. Myślałem o tym polu w abstrakcyjnej superklasie bez inicjowania go i mając nadzieję, że każda podklasa będzie zmuszona go zainicjować.Publiczne statyczne pole końcowe w klasie abstrakcyjnej lub interfejsie
Myślałem o tym, ponieważ wszystkie moje podklasy klasy abstrakcyjnej deklarują publiczne, statyczne, końcowe pole String o nazwie UNIQUE_ID, i dla każdej podklasy konieczne jest zadeklarowanie takiego pola z dokładnie taką nazwą.
Mam nadzieję, że moje pytanie jest wystarczająco jasne, jeśli nie, proszę, powiedz mi to.
Czy można zrobić coś mniej więcej równoważnego?
EDIT: Kod dodania:
Moja klasa abstrakcyjna wygląda następująco:
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";
}
...
}
Niektóre non-abstrakcyjnych podklas tej klasy abstrakcyjnej wyglądać (zauważ, że wszystkie z nich deklaruje 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";
}
...
}
przykładem więcej:
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) {
...
i ostatni:
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;
...
}
Proszę dodać fragmenty kodu, aby to pytanie było jaśniejsze! – ppeterka
po napisaniu kodu pod numerem –
mam nadzieję, że moja odpowiedź była pomocna. nie wiem, czy jest szybka naprawa, która jest lepsza niż obecna implementacja. na dłuższą metę odsunięcie od pól statycznych do osobnej struktury danych, która śledzi metadane, może być udoskonaleniem. –