Statisches Pendant zu "this"
Bernd
- java
Hallo,
ich habe verschiedene Klassen die von einer anderen Erben. Die Oberklasse hat nun eine statische Methode, die anhängig von der Unterklasse anders abläuft.
Beispiel:
class X {
public static test() {
return Klassenname;
}
}
A extends X {
}
B extends X {
}
B.test() sollte nun "B" ausgeben und A.test() "A"
Meine Frage nun: Wie bekomme ich in der statischen Methode raus, über welche Klasse die Methode aufgerufen wurde?
Bei nicht-statischen Methoden gibt es ja this.getClass() und bei Klassen kann man die Klasse mit X.class rausbekommen - aber wie geht letzteres von innerhalb einer Klasse aus für sich selbst. Es müsste doch ein statisches Pendant zu "this" geben??
moin Bernd :)
Beispiel:
class X {
public static test() {
return Klassenname;
}
}
A extends X {
}
B extends X {
}
B.test() sollte nun "B" ausgeben und A.test() "A"
Meine Frage nun: Wie bekomme ich in der statischen Methode raus, über welche Klasse die Methode aufgerufen wurde?
Meine Antwort: gar nicht
Das was du vorhast ist auch nicht sehr sinnvoll, da statische Methoden immer direkt aufgerufen werden sollten und nicht über Kindklassen.
Am einfachsten kannst du dein Problem lösen, wenn du deine Methode test() jeweils in den Klassen A und B überschreibst.
Bei nicht-statischen Methoden gibt es ja this.getClass() und bei Klassen kann man die Klasse mit X.class rausbekommen - aber wie geht letzteres von innerhalb einer Klasse aus für sich selbst. Es müsste doch ein statisches Pendant zu "this" geben??
Soweit ich weiss, gibt es sowas nicht. Wozu auch?
liebe Grüße aus Berlin
lina-
Hallo,
In diversen Programmiersprachen, z.b. PHP, wäre das 'self', ka obs das auch bei java gibt, aber vielleicht hilfts dir ja weiter ;)
Viele Grüße
Patrick
Es müsste doch ein statisches Pendant zu "this" geben??
Nein, denn this beschreibt ein Objekt einer Klasse. Statische Methoden sind jedoch definitionsgemäß nicht objektgebunden. Das ist ja der ganze Witz an der Sache.
Hallo,
vielleicht helfen dir das Stichwort "Singleton" und "Factory" weiter. Bei diesen Entwurfsmuster (einfach mal nach googlen), werden Objekte über statische Methoden erzeugt. Dann muss deine test()-Methode nicht mehr statisch sein: