FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Java: statische Methode

Java: statische Methode 2003-05-18 20:48
Farcon
Ich möchte gern die Ausgabe des Namens einer Klasse als Methode implementieren. In den Docs hab ich dazu getClass().getName() gefunden, wenn ich die Methode dann aber static mache, meckert der Compiler über das this.

public class foo { public void printKlassename() { System.out.println(this.getClass().getName()); }
Sagt mir, wie es geht :)


Re: Java: statische Methode 2003-05-18 20:52
Slater
Ich möchte gern die Ausgabe des Namens einer Klasse als Methode implementieren. In den Docs hab ich dazu getClass().getName() gefunden, wenn ich die Methode dann aber static mache, meckert der Compiler über das this.

public class foo { public static void printKlassename() { System.out.println(this.getClass().getName()); }
Sagt mir, wie es geht :)


na ja in einer static-methode kann man wohl kein THIS verwenden (bezieht sich auf das aktuelle OBJECT), versuch mal

public class foo { public void printKlassename() { System.out.println((new foo()).getClass().getName()); }



Re: Java: statische Methode 2003-05-18 21:03
Farcon
Thx. Aber extra für den Aufruf ein neues Objekt erzeugen, was danach nicht mehr gebraucht wird ? Kann man das nicht eleganter lösen, so dass die getName() Methode irgendwie direkt von der Klasse aufgerufen wird ?

Re: Java: statische Methode 2003-05-18 21:11
DICTION
Moin !

Eine statische Methode bietet kein Pointer aufs aktuelle Objekt, da sie eben statisch ist und kein Objekt existiert in dem die statische Methode aufzurufen wäre…

statische Methoden sind IMHO auch nicht wirklich nach dem OOP-Prinzip…

eigentlich muesste das dann so in etwa heissen:

foo f = new foo(); // Pointer vorhanden…
f.printKlassename(); // Pointer wird abgefragt

Gruss

Diction


Re: Java: statische Methode 2003-05-18 21:34
UncleOwen
public class foo { public static void printKlassename() { System.out.println(staticthis.getClass().getName()); } private static foo staticthis = new foo(); }
So mal eben schnell hingehackt…

Re: Java: statische Methode 2003-05-19 01:02
TriPhoenix
statische Methoden sind IMHO auch nicht wirklich nach dem OOP-Prinzip…

Jein. Es ist definitiv noch weniger dem OOP-Prinzip entsprechend, wenn man eine Methode in eine Klasse tut die nichts mit einem Objekt zu tun hat. Deswegen dann doch lieber ne Static-Methode.

Re: Java: statische Methode 2003-05-19 02:34
MoKrates
public class foo { public static void printKlassename() { System.out.println(staticthis.getClass().getName()); } private static foo staticthis = new foo(); }
So mal eben schnell hingehackt…

Hmpf… Mann kann doch erwarten, dass eine Klasse selber weiss, wie sie heisst, oder? Zumindest der Programmierer sollte wissen, wie die Klasse heisst, die er grade schreibt, deshalb macht das mit statischen Methoden auch keinen Sinn.

Entweder baust Du sowas:
public class foo { public static void printKlassename(Object o) { System.out.println(o.getClass().getName()); } }
Oder sowas, was ich allerdings nicht fuer besonders sinnvoll halte:
public class foo { public static void printKlassename() { System.out.println("foo"); } }
MoKrates

Re: Java: statische Methode 2003-05-19 18:50
Anonymer User
auch wenn es ja fast schreiben arbeit macht die zeile
System.out.println("Klasse heißt lalala");
zu schreiben kann man sich allgemein Daten zu _Klassen_ über die Klassenobjekte beschaffen.
Zugriff auf sie hat man über
Class.forName("Package.Klassenname");
Rückgabewert ist vom Typ Class.
Class wiederum bietet einige Methoden an, bspw. auch
die getName()-Methode.

Bsp:
System.out.println(Class.forName("unbenannt1.Test").getName());

Natürlich ist es gewisserweise Blödsinn diese Möglichkeit zu nutzen, wenn es _nur_ um die Ausgabe des Klassennamens geht
:-)
bj

Re: Java: statische Methode 2003-05-19 19:20
TriPhoenix
Natürlich ist es gewisserweise Blödsinn diese Möglichkeit zu nutzen, wenn es _nur_ um die Ausgabe des Klassennamens geht
:-)

Vor allem, wenn man mit statischen Methoden Arbeitet.

Dann kann man auch anstatt:
Fooklasse.printClassname();

gleich schrieben:
System.out.println("Fooklasse");

Re: Java: statische Methode 2003-05-19 19:41
MoKrates
Natürlich ist es gewisserweise Blödsinn diese Möglichkeit zu nutzen, wenn es _nur_ um die Ausgabe des Klassennamens geht
:-)

Vor allem, wenn man mit statischen Methoden Arbeitet.

Dann kann man auch anstatt:
Fooklasse.printClassname();

gleich schrieben:
System.out.println("Fooklasse");

Das hab ich doch gesagt. Tri, hab ich das gesagt? Das hab ich gesagt… Oder nicht?????ßßß

MoKrates

Re: Java: statische Methode 2003-05-19 19:57
TriPhoenix
Das hab ich doch gesagt. Tri, hab ich das gesagt? Das hab ich gesagt… Oder nicht?????ßßß

Ja hast du, hab nicht alles gelesen, sorry [img]http://www.fb18.de/gfx/22.gif[/img]

Re: Java: statische Methode 2003-07-21 01:24
Anonymer User
Gab es folgenden Vorschlag schon?
public class Foo { public static void printKlassename() { System.out.println(Foo.class.getName()); } }
CU, Gregor.

Re: Java: statische Methode 2003-07-21 07:45
MoKrates
Macht nicht viel Sinn. Du musst den Namen kennen, um ihn auszugeben. Sinnfrei

MoKrates

Re: Java: statische Methode 2003-07-23 02:03
ernie
Ich frage ich eigentlich nur eines: wozu?
ich kann mir keine sinnvolle anwendung dafür vorstellen. aber vielleicht habe ich auch nur zu wenig phantasie…

Re: Java: statische Methode 2003-07-23 04:21
MoKrates
Jaja, nach dem Wozu darf man eigentlich nie fragen, aber eigentlich ergibt sich meistens aus dem Wozu auch das Wie…

MoKrates

Re: Java: statische Methode 2003-07-23 11:49
Farcon
Es war eine Aufgabe vor Wochen; die Klasse sollte eine Methode haben, die eine Überschrift und dem Klassennamen ausgibt. Von dieser einen Klasse sollten dann die jeweiligen Subklassen diese Überschrift dann richtig ausgeben. Also etwa "Hallo ich bin Klasse " + getKlassenName



Re: Java: statische Methode 2003-07-23 11:56
Slater
gabs da auch ne musterlösung?
ist es möglich, statisch von einer klasse den klassennamen abzufragen?

Re: Java: statische Methode 2003-07-23 12:58
xeen9
Wieso wollt ihr eigentlich den Namen nicht explizit in die Methode hineinschreiben

class Fooklasse {

public void gibKlassenName() {
System.out.println("Fooklasse");
}
}

Ich verstehe nicht, warum das nicht für den Zweck ausreichen sollte. In Subklassen wird diese Methode dann einfach überlagert. So viel Mehrarbeit ist das doch nicht.

Stefan

Re: Java: statische Methode 2003-07-23 13:02
Slater
ja genau, ist ja überhaupt nix an mehrarbeit,

wozu gibts bloss sowas wie object.getClass().getName()?

kann man doch auch jedesmal selber schreiben [img]http://www.fb18.de/gfx/25.gif[/img]


Re: Java: statische Methode 2003-07-23 14:08
MoKrates
Danke Slater :)

MoKrates

Re: Java: statische Methode 2003-07-23 16:50
TriPhoenix
ja genau, ist ja überhaupt nix an mehrarbeit,

wozu gibts bloss sowas wie object.getClass().getName()?

kann man doch auch jedesmal selber schreiben [img]http://www.fb18.de/gfx/25.gif[/img]

Nicht unbedingt. Spätestens wenn man z.B. Plugin-Systeme schreibt (wo solche Methoden imho erst richtig Sinn machen) hast du evtl. einfach eine Liste von Class-Objekten. Da kann mannicht mehr selber schreiben.

Re: Java: statische Methode 2003-07-23 17:02
Slater
gabs da auch ne musterlösung?
ist es möglich, statisch von einer klasse den klassennamen abzufragen?

da fällt mir ein, dass man gar nicht unbekannte klassen befragen kann,
(so wie bei einem objekt, von dem man die klasse nicht weiss),

eine klasse müsste man ja mit ihrem namen ansprechen,
dann hat sich die abfrage wohl auf jeden fall erledigt [img]http://www.fb18.de/gfx/22.gif[/img]


Re: Java: statische Methode 2003-07-24 01:07
MoKrates
aber ein this.getClass().getName() in einer Oberklasse von anderen Klassen muesste Sinn machen koennen. Oder nicht?

MoKrates

Re: Java: statische Methode 2003-07-24 01:14
Slater
versteh ich nicht ;),
aber bei this gehts ja immer um objekte, das ist ja langweilig

Re: Java: statische Methode 2003-07-24 19:38
TriPhoenix
aber ein this.getClass().getName() in einer Oberklasse von anderen Klassen muesste Sinn machen koennen. Oder nicht?

MoKrates

Vielleicht nicht direkt IN der Oberklasse, aber wenn man vererbte Objekte nimmt die man nur als Object[] oder so speicher könnte das interessant sein.

Re: Java: statische Methode 2003-07-24 19:48
UncleOwen
Dafuer gibts dann aber doch instanceof (und schon das ist meistens nur ein Wuergaround)

Re: Java: statische Methode 2003-07-24 20:04
M
Damals im Javapraktikum haben wir uns das so zurechtgebastelt (das sind natürlich nur die relevanten Teile der Klasse):
public class KlassenInfo extends JFrame { private Class _objSign; private Constructor[] _objConstr; private Method[] _objMeth; private Field[] _objAttr; [...] public KlassenInfo (Class _objSign) { super("KlassenInfo - Angezeigte Klasse:" +_objSign.getName()); _objConstr = _objSign.getDeclaredConstructors(); _objMeth = _objSign.getDeclaredMethods(); _objAttr = _objSign.getDeclaredFields(); _attrList = new JList(); [...] MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int index = _attrList.locationToIndex(e.getPoint()); KlassenInfo k2 = new KlassenInfo(_objAttr[index].getType()); k2.pack(); k2.show(); } } }; _attrList.addMouseListener(mouseListener); [...] public static void main(String[] args) { KlassenInfo ki = new KlassenInfo(KlassenInfo.class); ki.pack(); ki.show(); } } Der Trick ist, das man mit einer fest angegebenen Klasse beginnt und dann (rekursiv) zu allen Elementen die jeweilige Klasse heraussuchen und anzeigen kann.

Re: Java: statische Methode 2003-07-25 09:09
MoKrates
Tjo. Mit Instanceof waere das wesentlich aufwendiger bis unmoeglich :)

MoKrates