Klassenname$1 ...

0l1

Mitglied
Hallo ihr alle,

ich habe hier vor meiner Nase ein Objekt l1 von einer Klasse Label. Die Klasse hat eine Eigenschaft "border". Wenn ich nun per
Java:
System.out.println( l1.getBorder() );
diese Eigenschaft hole, sehe ich, dass dort etwas drinsteckt wie SimpleLabel$1@95b1bc2

Damit weiß ich gerade leider nichts anzufangen.

Ich hätt allerdings gern Zufriff auf das Objekt, das dahinter steckt, da es mir Informationen über die Form des Labels gibt.

Folgendes funktioniert dabei leider nicht:
Java:
SimpleLabel sL = (SimpleLable)l1.getBorder();

Die Fehlermeldung sagt, es kann kein Cast von SimpleLabel$1 zu SimpleLabel durchgeführt werden.

Ich würde mich megamäßig freuen, wenn ihr mir weiterhelfen könnt. Meine Google-Suche war leider nicht so ergiebig.

Gruß :)
 
B

bygones

Gast
Border kann ja auch kein SimpleLable sein...

welchen Rückgabewert hat den getBorder() ? dann hast du doch schon dein Objekt....
 

kay73

Bekanntes Mitglied
Java generiert Klassennamen in der Form "Klassenname$1", z. B. wenn innerhalb der Klasse eine anonyme Implementierung eines Interfaces steht. Mit Border hat das wahrscheinlich gar nichts zu tun.
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Folgendes funktioniert dabei leider nicht:
Java:
SimpleLabel sL = (SimpleLable)l1.getBorder();

Erstens sollte das wohl so aussehen

Java:
SimpleLabel sL = ((SimpleLable)l1).getBorder();

Sonst versucht der auf l1 die Methode getBorder() aufzurufen und dann den Rückgabewert von getBorder auf SimpleLabel zu casten.

Zweitens versuchst du auch mit meiner Variante das was getBorder liefert an sL zuzuweisen was aber vom Typ SimpleLabel ist --- ein CHAOS ist das.

Was ist l1 denn genau?

Geht das?
Java:
SimpleLabel sL = (SimpleLable)l1;

Geht danach das?
Java:
 sL.getBorder();

Und last but not least - Stell deinen Code hier rein, sonst ist es unendlich schwierig passende Antworten zu liefern.
 

0l1

Mitglied
Olé! :D Soviele Antworten, das bin ich aus anderen Communities schon gar nicht mehr gewöhnt :)

Ok, das war wohl alles in allem ein bisschen verwirrend. Der Code-Teil, um den es geht, sieht so aus:

Java:
// Übergabe von l1. l1 ist vom Typ "Label"
[...]
Border border = l1.getBorder();
System.out.println(border);

Die Ausgabe lautet: SimpleLabel$1@17e581f9

Nur aufgrund dieser Ausgabe habe ich mich verleiten lassen, das Teil nicht als Border zu deklarieren. Ich möchte nämlich gerne an dieses SimpleLabel dran, dass auch als Klasse existiert (allerdings nicht irgendwie in eine andere Klasse eingebaut, soweit ich das überschauen kann.)
Die Frage der Klammerung ist also da erst einmal gar nicht so wichtig, denke ich mal.

Dass System.out.println() mir diese Antwort gibt, sollte ja auch irgendwas bedeuten, oder? Ist das eine Art Referenz oder so? Ich meine, ich komme im Moment nur an die Methoden dran, die in "Border" stecken, weiß aber durch die Ausgabe, dass da ein SimpleLabel drin ist... da muss doch irgendwie dranzukommen sein, nicht wahr? :D

Die Antwort von kay73 dazu war interessant, leider kann ich aus dieser Information für mich nicht die Möglichkeit extrahieren, da Zugriff auf das SimpleLabel zu bekommen ...

Achso und danke übrigens schonmal :)
 

Murray

Top Contributor
Ich meine, ich komme im Moment nur an die Methoden dran, die in "Border" stecken, weiß aber durch die Ausgabe, dass da ein SimpleLabel drin ist
Die Ausgabe sagt Dir nicht viel mehr, als dass der Typ des Border-Objekts eine anonyme Klasse ist, die innerhalb von SimpleLabel deklariert wurde. Trotzdem kommst Du deshlab nich lange nicht von der Border an das SimpleLabel.
Aber ist nicht eigentlich l1 das Label? Was hat das denn für einen Typ?
 

0l1

Mitglied
l1 ist vom Typ "Label" ... Das ist einfach nur ein Schriftzug. Will man dem Teil einen Rahmen geben, dann wird da scheinbar ein Extraobjekt angelegt, dass eine Form hat (Ellipse, Rechteck,...) und eben auch eine Linien drumherum. Das wiederum scheint dieses SimpleLabel zu sein, dass da in der "border"-Eigenschaft von der Klasse Label "verlinkt" ist. Ich glaube, l1 ist dabei gar nicht so wichtig. Interessant ist hier ja lediglich der Rückgabewert von getBorder ...

Ich mein, irgendeinen Grund muss das ja auch haben, dass da System.out.println nicht wie sonst das Border-Objekt mit seinen Eigenschaften ausgibt, sondern eben diese Zeichenkette ... das da hinter dem @ lässt mich auf eine Adresse im Speicher oder sowas... vielleicht auch ein Hash-Wert oder so schließen. Damit muss es doch irgendwas auf sich haben :)
 
Zuletzt bearbeitet:

Murray

Top Contributor
Was Du das siehst, ist die Default-Implementierung der toString-Methode - versuch doch mal
Java:
System.out.println( new Object().toString());
Da wirst Du etwas ganz ähnliches sehen, nur eben ohne das $1, weil hier die toString-Methode eben nicht in einer anonymen Klasse deklariert ist.
 

Neue Themen


Oben