alle Eigenschaften eines Objekts per Schleife durchgehen

Katzehuhn

Erfahrenes Mitglied
Hi, ist es irgend wie möglich, dass mir ein Objekt, alle seine Eigenschaften, als Liste zurückgibt, sodass ich diese per Schleife abarbeiten kann?

Ich frage euch dies deswegen, da ich MySQL dazu nutze um meine Javaklassen per MySQL zu serialisieren und zu deserialiseren. Ich benutze MySQL deswegen, da ich eine administrative PHP Oberfläche verwende um die Daten andersweitig zu manipulieren.
Jetzt möchte ich ein Tool schreiben, dass die Datenbank mit bestimmten Javaklassen abgleicht, sodass ich bei Änderungen dieser, nicht immer neue Spalten anlegen muss.
Oder kennt jemand vielleicht eine gute Alternative für mein Problem?
 
Wenn du nach "java reflection" googlest wirst du eine Menge gute howtos und snippets zu dem Thema finden. Solange kannst du schonmal folgenden code testen:

Code:
		Class c = MyClass.class;
		Method[] methods = c.getDeclaredMethods();
		for (int i = 0; i < methods.length; i++) {
			System.out.println(methods[i]);
		}
		
		Field[] fields = c.getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			System.out.println(fields[i]);
		}
 
Hallo,

ja JDO /JDO2 (Java Data Objects) war "ein Schritt in Richtung" Objekt relationales Mapping, der aber IMHO letzten ein ziemlicher Rohrkrepierer war...

Heute gibts die etablierten O/RM Technologien JPA / Hibernate / Toplink & Co. JDO würde ich heute nicht mehr verwenden.

Gruß Tom
 
Rrrrichtig... Toplink heißt jetzt EclipseLink und hat ein paar miese Flaws ;). JPA mit Hibernate ist ziemlich mächtig...

Gruß
Ollie
 
Ich hab mir Hibernate jetzt mal angeschaut, ist leider nicht genau das was ich brauche, da ich PHP zur Dateneingabe verwenden möchte und ich dadurch die Art der Serialisierung teilweise hard codieren muss.

Kurze Frage ohne den größeren Zusammenhang zu erklären:
Ich hab die Klassen Fahrzeug, Auto, Autobus und Motorrad.
Letzte drei extenden dem Fahrzeug. Jede dieser 4 Klassen hat die statische Methode setDBEigenschaften(). Was diese Methode macht ist jetzt mal egal.
Ich möchte diese statische Methode jetzt bei allen 4 Klassen aufrufen.
Dazu müsste ich ja
Fahrzeug.setDBEigenschaften(); Auto.setDBEigenschaften(); Autobus.setDBE.... usw aufrufen.
Ist es irgend wie möglich, dies in einer Schleife zu bewerkstelligen ohne jedes einzeln aufzurufen?
Array{Fahrzeug, Auto, Autobus, Motorrad}
Kann ich Klassennamen und ihre statischen Eigenschaften, irgendwie wie Objekte behandeln?

Danke^^
 
Jo also ich mal davon ausu dass Du nun Java und nicht PHP meinst :)
dafür kann man prima Interfaces verwenden, sie sind dazu regelrecht geschaffen worden.

Deine Klassen mit Deiner methode die bei allen gleiche ist definierst Du in einem Interface, welches einen wiedererkennbaren Namen hat.
alle Deine Klassen implementieren dieses Interface. Die Klasse bzw. die Methode die die setEBEigenschaften() aufrufen soll geht über alle diese Objekte allerdings nur als Interface (manche nennen es auch Typ)

Allerdigns Frage und Warnung zu Deinem Szenario: ist Deine setDBEigenschaften-Routine tatschlich Objekt abhängig oder vielleicht doch eher Klassenbhängig (also statisch) ?
Soll heißen ein Auto-Objekt (Mercedes) hat andere DB-Eigenschaften als ein Auto (VW-Golf)? dann ist es vermutlich Objektabhängig, aber hat Auto egal welche Marke dieselben DBEigenschaften (ebenso wie bei den anderen Fahrzeugen, von typ zu typ getrennt) die grundssätzlich dieselben DBEigenschaften,) dann sieht es eher nach einer Klassen-Methode aus.
Naja wie dem auch sei. Für objektabhenängigen Methoden ist ob beschriebener Weg über Interfaces sehr brauchbar.
 
Jop ich bezieh mich da auf Java.
Also die Methoden sind Klassenabhängig und somit statisch, deswegen auch die Frage ob man sie wie Objekte behandeln kann und per Schleife abarbeiten?
Ansonsten müsste ich sozusagen per Hand jede Klassenmethode aufrufen, was vielleicht sogar besser wäre, mir geht es nur darum eine möglichst leicht wartbare Routine zu schreiben, die meine Java Klassen nach meinen Vorstellungen in der Datenbank abbildet und im Fall neuer Klassen und Eigenschaften diese einfach hinzufügt.
 
Zurück