Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen.

Tintenfisch

Bekanntes Mitglied
Hey,
ich möchte auf eine Instanz der selben Klasse aus einer überschriebenen Methode in einer Methode zugreifen. Aus einer Methode geschieht dies ja mit this, aber aus der überschriebenen Methode gelingt mir dies nur über Umwege.
Anbei mal ein Bsp. bei welchem die Methode "entryDateFillLiVi" vom entryField aufgerufen werden soll. In dem Beispiel ist diese Methode zwar statisch, weshalb ich mit der Klasse EntryField darauf zugreife und entryField einfach als Parameter habe, dies ist aber nur momentan provisorisch, da mir diese Info fehlt, von dort auf die eine Instanz dieser Klasse zuzugreifen. Das static dann bitte bei der Methode "entryDateFillLiVi" wegdenken.
Java:
    public void entryDateFillLiViViaDatePi (EntryField entryField) {
        this.getEntryDate().setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent arg0) {
                
                EntryField.entryDateFillLiVi(entryField); // hier die provisorische Lösung 
            }
        });
    }
 
Also das ist so noch nicht 100% verständlich.

Das Problem könnte sein, dass Du eine Klasse von EntryField abgeleitet hast. Diese Klasse hat nun weitere Methoden und diese möchtest Du ggf. aufrufen:
In so einem Fall kannst Du prüfen: Ist die übergebene Instanz vom Typ der neuen Klasse - ist dies der Fall, dann machst Du einen cast und rufst die Methode auf.

Komplizierter wird es, wenn Du eine Methode hast, die ein EntryField als Argument bekommt aber das muss nicht vom neuen Typ sein. Das, was Du da machst, das geht mit allen EntryField Instanzen:
Hier kommt man dann in einen Bereich, in dem ein Ableiten von EntryField nicht zielführend ist (Mag für andere Dinge notwendig sein, aber ich betrachte nur diesen einen Punkt). Andere Sprachen (C#, Kotlin) bieten die Möglichkeit, bestehende Klassen zu erweitern. Dies bietet Java aber nicht und es bleiben dann nur Klassen, die man oft als Tool, Util oder Hilfsklassen bezeichnet. Diese bieten dann viele statische Methoden, die dann aufgerufen werden können. In Java hat man diese Klassen oft mit einem s -> Objects, Arrays, ...
Das erweitern einer Klasse ist übrigens nur syntaktischer Zucker. Unter dem Strich hat man da auch nur eine statische Methode in einer anderen Klasse. Der Compiler erlaubt dann lediglich den Aufruf auf der eigentlichen Instanz, was auch durchaus problematisch ist. (Im c# Umfeld geht es so weit, dass es eine Empfehlung gibt, dies in Libraries nicht zu verwenden!)

Diese Lösung mit den statischen Methoden ist technisch möglich. Aber generell sollte man sich über sein Design Gedanken machen um zu sehen, ob dies wirklich notwendig ist. Oft ist es einfach nur ein Zeichen für ein schlechtes Design und es empfiehlt sich, sein Model umzuändern.
Daher macht es ggf. Sinn, uns erst einmal genau zu schreiben, was Du da überhaupt machst.

Was ich hier direkt sehe: Da geht es ja um einen EventHandler - und denn kannst Du ja als solches immer und überall haben. Wenn es da eine statische Methode tut, dann reicht da evtl. schon etwas wie:
Java:
this.getEntryDate().setOnAction(new MyCoolEventhandlerClass());
Du hast also diese statische Methode in eine eigene Klasse gepackt als handle Methode. Noch nicht wirklich schön, aber denkbar.

Es gibt noch viele andere Ideen, wie Du da ein Lambda Ausdruck oder eine Methodenreferenz verwenden kannst (was ich bevorzuge, da ich diese Methoden aus dem Interface nicht mag. Da sagt der Methodenname nur aus, wo er Verwendung findet aber nicht mehr, was die Methode macht. (handle -> es wird ein Event verarbeitet. Aber was da passiert, das sagt die Methode nicht!)
 
Du meinst, weil this in der anonymen Klasse nicht vom Typ EntryField sondern stattdessen EventHandler ist?

Dann ist EntryField.this die Lösung.
 

Zurück
Oben