In Java können wir ein final
Feld in Konstruktoren sowohl in der Basisklasse und seinen Unterklassen als auch in einem Inline-Initialisierungsblock in der Basisklasse initialisieren. Es scheint jedoch, dass wir final
Felder in einem Inline-Initialisierungsblock in einer Unterklasse nicht initialisieren können. Dieses Verhalten betrifft hauptsächlich anonyme Klassen, von denen super
Konstruktoren nicht aufgerufen werden können.Gibt es eine Möglichkeit, das letzte Feld in der anonyme Klasse zu initialisieren?
abstract class MyTest {
final protected int field;
public MyTest() {
// default value
field = 0;
}
}
MyTest anonymTest = new MyTest() {
{
// Error: The final field MyTest.field cannot be assigned
field = 3;
}
};
Gibt es eine Möglichkeit, um eine geerbte final
Feld in einer anonymus Klasse zu initialisieren?
Kommentar: Diese Frage bezieht sich nicht auf Konstruktoren, sondern auf die Initialisierung des endgültigen Feldes.
Es geht nicht um den Bau, sondern um letzte Feld Initialisierung. –
Wahr, aber die * einzige * Situation, in der Sie in der Lage sind, ein 'final' Feld von einer Unterklasse zu setzen, ist durch einen Superkonstruktor. Dieses Duplikat deckt also die einzig gültige Situation für Ihre Frage ab. – resueman
Ich stimme nicht zu. Wenn es keinen anderen Weg als den Konstruktor gibt, dann ist dies die Antwort auf die Frage. –