Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe eine abstrakte Klasse, von der mehrere Klassen erben. Kann ich irgendwie in der abstrakten Klasse definieren, dass alle Klassen, die von dieser Klasse erben, zwingend einen Konstruktor ohne Parameter enthalten müssen? Danke!
edit: du könntest per Reflection im Konstruktor ein 'new Klassenname()' ausführen und die Exception interpretieren und so immerhin feststellen, dass keiner da ist
nicht zur compile-time. du könntest versuchen, ob man in der abstrakten klasse während der initialisierung das konkrete objekt mittels reflection daraufhin analysieren kann und dann eine entsprechende exception schmeissen. aber das geht höchstens als eklige lösung durch.
Je nachdem, um was es geht, könnte man da vielleicht irgendwas mit einer Factory dengeln. DER Kann man nämlich die (abstrakte) parameterlose Methode createInstance() vorschreiben, und jede Factory wird dann diese Methode anbieten müssen (und wo sie evtl. benötigte Parameter für den Konstruktor herbekommt, ist ihre Sache...) - das wäre vielleicht (aus OOP-Sicht) eine "saberere" Lösung ... muss halt gucken, ob das für dich passt....
Hab das Ganze jetzt anders gelöst, ist aber seeeeeeeehr projektspezifisch und um das zu erklären, müsste ich das komplette Projekt in mehreren Seiten erläutern . Ich hoffe man kann mir verzeihen, dass ich hierzu jetzt nicht meine Lösung veröffentliche .
und um das zu erklären, müsste ich das komplette Projekt in mehreren Seiten erläutern . Ich hoffe man kann mir verzeihen, dass ich hierzu jetzt nicht meine Lösung veröffentliche .
stand mal vor nem ähnlichen problem und habs dann über eine factory und ne finale init() methode gelöst. nicht sehr schön, aber war zumindest eine lösung
was kann es nur bringen, sich für den Konstruktor der Subklassen zu interessieren?
statt eines Konstruktors mit Parameter kann man doch auch eine statische init()-Operation schreiben, oder jeder der das Objekt erzeugt setzt danach noch individuell weiter Felder oder sonstwas,
da kann man gar nix kontrollieren, dann müsste man genausogut auch verhindern, dass in den Subklassen setter-Operation dazukommen oder so..
wenn man das ganze für Reflection nutzt, etwa die korrekte Arbeit als Bean für Frameworks wie Hibernate verpflichten will, ok,
aber dann wäre Factory auch keine Lösung
Ich erstelle in meinem Programm über Reflection neue Instanzen meiner Klasse und aller Klassen die davon erben. Diese Klassen benötigen allesamt garantiert keine Übergabeparameter im Konstruktor. Deshalb würde ich es mir auch gerne sparen auf andere Konstruktoren zu prüfen und vorschreiben, dass ein leerer Konstruktor verwendet werden muss.