Wie bekomme ich von einem unbekanntem Objekt den Wert eines Attributs?
-
Hallo,
Ich hab da ein nicht allzu leichtes Problem...Sagen wir ich habe 3 Klassen:
1. GUI ( =Obervable)
2. Steuerung ( =Observer)
3. cEvent ( =Objekt das an den Observer übergeben wird)Nach einem Klick auf einem Button setze ich die Steuerung in Kenntnis das sich was getan hat. Dabei übergebe ich ihm ein Objekt, ein Event.
Diese Klasse enthät verschiedene Attribute, z.B. den Namen dieses Events.Nun will ich in der Observerklasse den Namen des Events herrausfinden.
Mein Ansatz ist so:
public void update( Observable o, Object obj ) { System.out.println( obj.getClass().getField("WasIstPassiert") ); . . . . }
Nun bräuchte ich eine Methode, die mir den Inhalt des Feldes wiedergibt, ich kann mit dem was ich habe nur anzeigen lassen, wie das Field ( =Attribut) heißt, aber nicht dessen Wert. Was hier eindeutig fehlt ist eine Methode die mir den Wert wiedergibt, z.B. value() oder sowas.
Das ist echt S***** ...
Wenn jemand trotzdem weiß, wie es geht, dann wäreich sehr froh und dankbar wenn er es mir denn mitteilen würdeTHX!
-
Bin mir zwar nicht ganz sicher ob ich verstanden habe was du willst, aber vielleicht hilft dir reflection.
http://java.sun.com/developer/technicalArticles/ALT/Reflection/
-
Kennst du den Datentyp des Attributes?
In java.lang.reflect.Field findet du diverse get-Methoden wie getByte(), getDouble(), getChar().
Vielleich thilft dir das!
-
Das mit den Reflektionen hilft mir leider nicht, da ich dadurch nur den Typ eines unbekannten Objects herrausfinde...
Ich will aber den Wert.
Und die angesprochenen get() getDouble() usw. Methoden, die erwarten noch einen Parameter, und in diesen Parameter soll ein weiteres Objekt rein, das durch dieses Objekt repräsentiert wird.get( Object obj) : Object
Returns the value of the Field represented by this Field, on the specified Object.
Das müsste ich quasi noch ein objekt unter dem Attribut haben, was irgendwie nicht geht.
Wenn ich etwas falsch verstanden habe, dann klärt mich aufAchja und "Ja" ich kenne den Datentyp des Feldes.
-
Rambo256 schrieb:
Das mit den Reflektionen hilft mir leider nicht, da ich dadurch nur den Typ eines unbekannten Objects herrausfinde...
Ne, schau dir mal den Teil "Invoking Methods by Name" von meinem Link an.
-
Wo ist den das problem.
Du bekommst ein object. Da du mit dem objekt selber nicht viel anfangen kannst guckst du nach was für einen Typ das ding hat und behandelst es dann entsprechend. Und so wie ich dich verstanden hab weist du von was für einem Typ das Object ist/sein soll. Also casten, aber nur wenns der gleiche Typ ist oder ein davon abgeleitetes sonsts gibts böse CastExeptions. (instanceof sollte das Zauberwort im if construct heissen)
public void update( Observable o, Object obj ) { if (obj instanceof MyClass) { ((MyClass)obj).getFeld(); } else { System.err.printeln("Falsches Object übergeben!"); } }
kann doch nicht so schwer sein.
oder der weg über die Reflection API.
gruss
-
Rambo256 schrieb:
Returns the value of the Field represented by this Field, on the specified Object.
Das müsste ich quasi noch ein objekt unter dem Attribut haben, was irgendwie nicht geht.
Wenn ich etwas falsch verstanden habe, dann klärt mich aufJa, hast du falsch verstanden. Das Objekt, das du da übergeben sollst, ist das, was ich in folgender Frage von dir dick markiere:
Wie bekomme ich von einem unbekanntem Objekt den Wert eines Attributs?
-
Hallo Rambo256,
das Problem liegt meiner Meinung nach im Design.
Wenn du bei dem Objekt weißt, das es ein bestimmtes Attribut hat,
dann ist doch die Verwendung eines Interfaces oder ein Ableitung
von Event eine gute Idee...
So kommst du doch ohne Probleme an den Wert.
Falls du ein Objekt hast, das bereits existiert und du im Nachhinein
einen Event-Typ hinzufügen möchtest, dann würde ich das Objekt kapseln.Das Event hat dann zwei Methoden:
Object getObject(); // dein Object ist nun ein Feld in der Message String getMessageType();
Gruß,
JSpille