Ich halte die Anforderung, dass die Felder endgültig als übermäßig restriktiv und ein Fehler durch die Java-Sprache Designer. Es gibt Zeiten, z.B. Baumbehandlung, wenn Sie in der Implementierung Konstanten setzen müssen, die Operationen an einem Objekt des Schnittstellentyps ausführen müssen. Das Auswählen eines Codepfads für die implementierende Klasse ist ein Kludding.Die Abhilfe, die ich benutze, ist eine Schnittstellenfunktion zu definieren und umzusetzen, indem eine wörtliche Rückkehr:
public interface iMine {
String __ImplementationConstant();
...
}
public class AClass implements iMine {
public String __ImplementationConstant(){
return "AClass value for the Implementation Constant";
}
...
}
public class BClass implements iMine {
public String __ImplementationConstant(){
return "BClass value for the Implementation Constant";
}
...
}
Allerdings wäre es zu abweichender Implementierung einfacher, klarer und weniger anfällig für diese Syntax zu verwenden:
public interface iMine {
String __ImplementationConstant;
...
}
public class AClass implements iMine {
public static String __ImplementationConstant =
"AClass value for the Implementation Constant";
...
}
public class BClass implements iMine {
public static String __ImplementationConstant =
"BClass value for the Implementation Constant";
...
}
Es ist nicht unbedingt wahr, dass letzte Felder Konstanten sind; das ist nur für primitive Typen garantiert. Im Allgemeinen bedeutet das letzte Schlüsselwort lediglich, dass sich der Speicherort nicht ändert. – Pops
Ich habe nicht gesagt, letzte Felder sind Konstanten, nur dass Konstanten endgültige Felder sind. Beachten Sie, dass es erlaubt ist, ein nicht primitives statisches Endfeld in einer Schnittstelle zu platzieren. Auch wenn sich der Inhalt dieses Felds ändert, ist der Verweis darauf konstant. –
@AdriaanKoster Sie haben genau gesagt, dass das letzte Feld konstant ist: * Kein Zustand wird erzwungen, indem nur Konstanten zugelassen werden. * - dieser Satz impliziert, dass alle letzten Felder konstant sind. Sie könnten versuchen, weiter über die von Ihnen verwendeten Wörter zu streiten, aber Ihre Aussage ist offensichtlich irreführend. –