ich die folgenden Klassen:Java abstrakt Eltern Aufruf Kind Methode vor Kind in Mutter Konstruktor initialisiert
abstract class Parent
{
private ClassDependentOnSize classDependentOnSize;
public Parent()
{
this.classDependentOnSize = new ClassDependentOnSize(size());
}
public abstract int size();
}
class Child extends Parent
{
private String DBSelection;
private String[] DBSelectionArgs;
public Child (String selection, String... selectionArgs)
{
super();
this.DBSelection = selection;
this.DBSelectionArgs = selectionArgs;
}
@Override
public int size()
{
//FAILS because Parent calls size before DBSelectionArgs is initialized
String temp = "";
for(String str : DBSelectionArgs)
temp += str;
return temp.length;
//This function basically does a calculation that should not be
//done before hand. I have posted the exact method below.
}
}
class ClassDependentOnSize
{
public ClassDependentOnSize(int size)
{
}
}
Während diese sind nicht meine genaue Klasse, das ist das gleiche Problem. Ich habe dieses geschrieben, um den unnötigen Code zu entfernen.
Wie Sie sehen können, versucht die Superklasse size() aufzurufen, bevor das untergeordnete Element fertig initialisiert wird, um die Klasse abhängig von der Größe zu erstellen. Ich bin gespannt wie jemand das in der Vergangenheit gelöst hat. Wie alle sicher wissen, muss super() die erste Zeile in einem Kindkonstruktor sein. Wie ich diese Klassen gelegt habe, ist das ein schlechtes Design? Ich habe das Gefühl, dass dies ein Problem ist, das vorher passiert sein muss, aber ich kann keine Lösung finden.
EDIT: Hier ist die genaue Methode. Es wird für eine Android-Anwendung verwendet.
Siehe http://stackoverflow.com/questions/18138397/calling-method-from-constructor – djmorton
@khelwood Ich denke, du meinst overridable, nicht überlastet – ControlAltDel
@ControlAltDel Ganz richtig. – khelwood