Ich habe eine abstrakte Java-Klasse, die ein Hashcode-Feld hat, das von den konkreten Unterklassen initialisiert werden sollte. Ich dachte, das Initialisierungsverfahren abstrakt zu machen, dhEinstellung von Oberklassenfeldern in der Unterklasse
abstract class A {
protected int hashcode;
// hashcode should be initialized in constructor
protected A() { hashcode = setHashcode(); }
abstract int setHashcode() {} // implemented by subclasses
}
Aber leider verschiedene Unterklassen müssen für setHashcode
in unterschiedlicher Anzahl von Argumenten zu übernehmen, zum Beispiel könnte die Klasse B berechnen hashcode zwei seine Felder und Klasse C könnte mit brauche drei, aber da der Aufruf von super die erste Zeile in Bs Konstruktor sein muss, wird dieses Schema nicht funktionieren. Ich frage mich also, ob es ein anderes Weg/Design-Muster gibt, um dieses Problem zu lösen?
Als Hinweis auf Stil: es umständlich ist, ein Verfahren mit dem Namen 'setSomething()', die keinen Wert gesetzt, sondern gibt den berechneten Wert. 'calculateHashcode' oder' determinateHashcode' könnte die Absicht der Methode besser ausdrücken. –
Sie finden die Informationen möglicherweise in [diese Frage] (http://stackoverflow.com/questions/7223435/java-call-base-method-from-base-constructor) und [diese Frage] (http: // stackoverflow com/questions/7477553/in-java-ist-da-ein-legitim-grund-zu-call-a-non-final-method-from-a-class-co) nützlich. –