Erstellen Sie eine Instanz innerhalb Abstrakte Klasse mit der Spiegelung
Ist es möglich, erstellen Sie eine Instanz von einer abgeleiteten Klasse in der abstrakten Vorfahren-Klasse mit der spiegelung
Sagen wir:
abstract class Base {
public Base createInstance(){
//using reflection
Class<?> c = this.getClass();
Constructor<?> ctor = c.getConstructor();
return ((Base) ctor.newInstance());
}
}//end Base
class Derived extends Base {
main(){
new Derived().createInstance()
}
}
- Hast du es versuchen? Scheint, wie es funktionieren würde.
- Nein, es ist nicht möglich
- Was passiert, wenn du versucht? Sie können dies tun, aber das ist eine ziemlich verdächtige design-Wahl.
- Könnte es gerechtfertigt sein, wie eine copy-Methode.
- Beachten Sie, dass Sie verschwenden Zeilen code:
public Base createInstance() { return (Base) getClass().newInstance(); }
ist alles, was Sie brauchen (Modul Ausnahmen). - Umm. Dass code nicht selbst kompilieren, auf den ersten Platz. Egal, was passiert, wenn du es ausprobiert?>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun,
Drucke
Ein häufiger Muster ist zu verwenden, Cloneable
Drucke
Jedoch, die Notwendigkeit, die entweder vermieden werden sollte. In der Regel gibt es einen anderen Weg das zu tun, was Sie benötigen, so dass base nicht implizit davon abhängen, abgeleitet.
Nachweisen, dass es funktioniert, ist einfach:
Drucke
Sollten Sie sich Fragen, zweimal, warum Sie es brauchen und ob es wirklich ein guter Ansatz für dein problem. Wenn Sie brauchen, Klonen, sollten die
clone
Mechanismus, der tut im Grunde das gleiche.Können Sie
Class.forName()
undClass.newInstance()
zu erstellen, die für jede Klasse. Aber es gibt keinen Weg, um leicht zu identifizieren Unterklassen einer Klasse. Sehen das JavaWorld-Tipp für eine Technik, dies zu tun.Allerdings denke ich , die wirkliche Frage ist, was ist es Sie letztlich versuchen, zu erreichen, und es kann getan werden leicht unter Verwendung konventioneller Techniken.