Ich weiß, was Sie sagen.
ich zum Beispiel möge eine Schnittstelle haben (was ich ExecutableList nenne) ein contant String-Feld 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
}
Leider genannt wird, ist dies in Java nicht möglich. Wenn Sie ein Feld in einer Java-Schnittstelle deklarieren, impliziert dies die Modifikatoren public
, static
und final
.Eine zukünftige Änderung der Java-Programmiersprache könnte ermöglichen, dass abstract
hinzugefügt wird, wodurch die implizierten Modifikatoren public abstract static final String USER_FRIENDLY_NAME;
gemacht werden, aber während Sie klar Regeln hierfür definieren könnten, wäre die Verwendung des Wortes abstract
verwirrend, wie abstract
und final
typischerweise verstanden werden Definieren Sie entgegengesetzte Bedeutungen.
Ich meine Daumen, dass eine zukünftige Version von Java dies implementieren wird. Ich habe gehört, dass private Schnittstellenmethoden in Java 9 hinzugefügt werden (für die Verwendung zwischen Standardmethoden), aber noch kein Wort zu dieser Ergänzung der Sprache. Es würde eine Reihe von Problemen mit der Rückwärtskompatibilität geben, die ich zuerst betrachten sollte, da bin ich mir sicher. Wenn jemand von Oracle dies liest, LASSEN SIE BITTE UNS KONSTANTEN IN INTERFACES ERKLÄREN UND LASSEN, VERSTEHEN KLASSEN/SCHNITTSTELLEN DEFINIEREN SIE !!!
In der Zwischenzeit ist Ihre einzige Option, eine String getUserFriendlyName();
Methode in Ihrer Schnittstelle oder abstrakten Klasse zu definieren. Nicht so elegant und vielleicht nicht so effecient, aber Sie haben zurzeit keine andere Wahl.
Vielleicht ist es bemerkenswert, dass eine Konstante mit möglicherweise unterschiedlichen Werten keine Konstante ist! Also geh mit Peters Antwort. – TedTrippin