So cosa stai dicendo.
io per esempio, vuole avere un'interfaccia (che io chiamo ExecutableList) hanno un campo di stringa contant chiamato USER_FRIENDLY_NAME
public interface ExecutableList<T extends ExecutableList<T,E>,E> //This is type parameter
extends List<E>, //self referencing. Trust
Comparable<E>, //me, it has its uses.
{
/** This would declare a constant but leave it to sub-interfaces/classes to define it. */
abstract String USER_FRIENDLY_NAME;
//Define the rest of your interface
}
Purtroppo, questo non è possibile in Java. Quando si dichiara un campo in un'interfaccia Java, ciò implica i modificatori public
, static
e final
.Una modifica futura al linguaggio di programmazione Java POTREBBE consentire di aggiungere abstract
, rendendo così i modificatori impliciti public abstract static final String USER_FRIENDLY_NAME;
ma mentre si potevano definire chiaramente le regole per questo, l'uso della parola abstract
sarebbe confuso, come in genere sono abstract
e final
definire significati opposti.
Sto incrociando le dita che una versione futura di Java implementerà questo. Ho sentito che i metodi di interfaccia privata verranno aggiunti in Java 9 (da usare tra i metodi predefiniti) ma non ci sono ancora parole su questa aggiunta alla lingua. Ci sarebbero un numero di problemi di compatibilità con le versioni precedenti da considerare prima, ne sono sicuro. Se qualcuno da Oracle legge questo, PER FAVORE, DICITECI DI DICHIARARE COSTANTI IN INTERFACCE E LASCIARTI LE CLASSI EREDITARIE/INTERFACCE DEFINIRE !!!
Nel frattempo, l'unica opzione è definire un metodo String getUserFriendlyName();
nell'interfaccia o nella classe astratta. Non elegante e forse non così efficace, ma al momento non hai altre opzioni.
Probabilmente vale la pena notare che una costante con valori potenzialmente diversi non è una costante! Quindi vai con la risposta di Peters. – TedTrippin