Object Dynamisch erzeugen (Reflection API)

Status
Nicht offen für weitere Antworten.
R

Refl

Gast
Tag,

ich habe folgendes Problem: Ich möchte Klassenobjete, verschiedener Klassen dynamisch erzeugen.

sprich:

Code:
Klassenobjekt objName = new Klassenobjekt();
(aber dynamisch)

ich habe es folgendermaßen versucht:

Code:
Object o = null;
Class myClass = Class.forName(Classpath);
o = myClass.newInstance();

Leider liefert mir das nicht das gewünschte Ergebnis. Das ganze funktioniert zwar und die Klasse wird geladen, aber ich erhalte nicht das entsprechende Objekt.

Bin im Moment etwas ratlos.

Gruß Refl
 
S

SlaterB

Gast
was passiert stattdessen?
bekommst du null oder eine Exception?
 
R

Refl

Gast
Nein, Exception bekomme ich keine.

Das Problem ist, dass ich auf diesem Wege o als Standardobjekt zurück bekomm und damit recht wenig anfangen kann.

habe es auch schon auf diesem wege versucht:

Code:
Class cls = Class.forName("com.globalside.zabas.dds.element.Rreg");
Constructor constructor = cls.getConstructor(new Class[]{Void.class});
Object object = constructor.newInstance(new Object[]{null});
ABC abc = (ABC) object;

Wenn ich statt ABC den Klassennamen verwende funktioniert das ganze (logischerweise) problemlos. Das Problem ist aber dass ich "ABC" eben dynamisch erzeugen möchte...
 
S

SlaterB

Gast
> Das Problem ist aber dass ich "ABC" eben dynamisch erzeugen möchte...

das macht keinen Sinn (daher gehts nicht und ist verboten),
angenommen es ginge, was würde es dir im Code nützen?
 

Refl

Mitglied
Nun, vll. habe ich mich einfach etwas missverständlich ausgedrückt.


Mein Vorhaben:

Ich habe einen Array der mit Klassennamegefüllt ist. Nun will ich diesen Array auslesen und aus jeder Klasse ein Objekt erzeugen.

Code:
Klassenobjekt objName = new Klassenobjekt(Param); (nur eben dynamisch)

[/quote]
 
S

SlaterB

Gast
das macht keinen Sinn (daher gehts nicht und ist verboten),
angenommen es ginge, was würde es dir im Code nützen? (die Erzeugung der Variablen für sich ist kein sinnvolles Endziel in einem Programm)
 

Refl

Mitglied
Fakt ist:

Ich habe im Moment mehrere Methoden in denen ich über eine Andere Klasse (Es gibt für jede Tabelle in einer Datenbank eine entsprechende Klasse) eine Verbindung zur Datenbank herstelle/auslese. Nun wäre es mir eben sehr recht wenn ich die jeweiligen Objekte (sprich das ResultSet) dynamisch erzeugen könnte um aus dem ganzen eine Methode zu machen.
 
M

maki

Gast
In diesem Falle sollte der Client doch wissen, was er benötigt. SOll er doch das Interface ABC mitübergeben.
 

Refl

Mitglied
Wenn ich ABC übergebe komme ich aber um mehrere Methoden nicht drum rum.

Nehmen wir an ich übergebe ABC an eine Methode, dann habe ich ja wiederum .. (ABC objName) als Parameter und das bringt mich nicht weiter?
 
S

SlaterB

Gast
du redest bisher noch in Rätseln

> Nun wäre es mir eben sehr recht wenn ich die jeweiligen Objekte (sprich das ResultSet) dynamisch erzeugen könnte

ein ResultSet ist ein ResultSet, was willst du da groß umwandeln?
 

Refl

Mitglied
Ok. ... Vll. ich glaub ich steh grad auf der Leitung. Also die Struktur sieht Folgendermaßen aus:

Klassen:

KlasseA - KlasseZ (Jede Klasse enthält Methoden um über einen Connection Layer die verbindung zu einer DB bzw. einer spezifischen Tabelle zu erstellen und diese über verschiedene Methoden auszulesen)

Klasse_Abfrage:

In dieser Klasse möchte ich nun alle Tabellen auslesen ... auf Umwegen sieht das ja nun so aus:

KlasseA ResultSet1 = new ResultSet1 KlasseA();
KlasseB ResultSet2 = new ResultSet2 KlasseB();
.
.
.

Dann eben eine Wiederholung in der erst KlasseA dann KlasseB usw. stück für stück über die ResultSet.ENTSPRECHENDE_METHODE ausgelesen wird...

Einfach wäre es allerdings wenn ich in einer wiederholung

KlasseBEZEICHNER ResultSet = new ResultSet KlasseBEZEICHNER(); dynamisch erzeugen könnte und das ganze unabhängig von der Klasse über "ResultSet" auslesen kann ...

hoffe man kann mir jetzt folgen, falls ich immernoch aufm Schlacuh steh möge man mir verzeihen. ???:L
 
S

SlaterB

Gast
nach wie vor gilt: die Auflistung für sich kann kein Endziel in einem Programm sein,
welchen Vorteil versprichst du dir von dieser Auflistung?

und dass der ganze Text sehr unverständlich ist, dürfte klar sein ;)
 

Refl

Mitglied
Was ich mir von dieser Auflistung verspreche:

Ich kann in einem Array die Tabellenname speichern, diesen Array in der entsprechenden Methode auslesen und je nach Tabellennamen bzw. Klassenname eben das ResultSet erzeugen.

Alternativ bräuchte ich eine extra Abfrage in der Ich aus dem Array den Tabellenname auslese und dann auf die dementsprechende Klasse zugreife.
 
S

SlaterB

Gast
das ResultSet (was immer daran auch dynamisch sein soll) kannst du auch normal erzeugen,
was macht es für einen Unterschied, wenn es dynamisch ist (was immer das heißt bei einem ResultSet)

> Alternativ bräuchte ich eine extra Abfrage in der Ich aus dem Array den Tabellenname auslese und dann auf die dementsprechende Klasse zugreife.

zeig doch mal beispielhaft solchen Code und wie du dir die Vereinfachung vorstellst
 

Refl

Mitglied
Ok dann hier mal der Code:

(so möchte ich es möglichst nicht haben:
Code:
for(int tabelle = 0;tabelle <= arrTabname.length;tabelle++){
    		
    		if(arrTabname[tabelle].equals("Class1")){
    			RsClass1 rso = new RsClass1(cm.getConnection());
		        Class1 o  = new Class1(); 
    		} else if(arrTabname[tabelle].equals("Class2")) {
    			RsClass2 rso = new RsClass2(cm.getConnection());
    			Class2 o = new Class2();
    		} else if(arrTabname[tabelle].equals("Class3")) {
    			RsClass3 rso = new RsClass3(cm.getConnection());
    			Class3 o = new Class3();
    		} 

		...

		} else if(arrTabname[tabelle].equals("ClassX")){ ...
                }



		
		while (rso.nextRow(o) & ok)
            	{
			//auslesen...
		}

Wie ich es gerne hätte:

Code:
for(int tabelle = 0;tabelle <= arrTabname.length;tabelle++){
    		
    		Class cls = Class.forName(Hier den Klasse/tabellennnamen aus arrTabnem holen);
		
		und nun eben aus der jeweilige Klasse wie oben beschrieben
		
		rso und o holen!


		
		while (rso.nextRow(o) & ok)
            	{
			//auslesen...
		}

}
[/code]
 
S

SlaterB

Gast
der erste Code macht gar keinen Sinn,
die Variablen RsClass1 rso, RsClass2 rso usw. werden nur lokal in ihrem if-Block definiert, sind danach nicht mehr sichtbar

es wird wahrscheinlich für alle Zeit eine von dir unbeantwortete Frage bleiben:
warum zum Teufel definierst du diese Variablen, was stellst du mit ihnen an?

da hast du nun immerhin etwas Code schon:
while (rso.nextRow(o) & ok)

jetzt überlegen wir mal: was bringt es dir an dieser Stelle, wenn rso ein bestimmter Typ und nicht einfach ResultSet ist?
(oder was immer die gemeinsame Basisklasse ist)
 

Refl

Mitglied
Ja, du sagst es, die Auswahl liefert hier nichtmal eine Lösung. (ist mir auch erst eben aufgefallen)

Ich kann mir nicht aussuchen "was" rso ist, die Klassen zum Umgang mit den Tabellen sind generierter Code und ich komme nicht umhin diese zu verwenden. Also muss ich rso auch mit RsKlassenname rso = new RsKlassenname(Connection); erzeugen ...
 
S

SlaterB

Gast
> die Klassen zum Umgang mit den Tabellen sind generierter Code und ich komme nicht umhin diese zu verwenden.

da stellt sich die Frage, wie du entscheidest, mit welcher Klasse umgegangen wird,
diese Stelle wäre dann der passende Augenblick für den Cast

Code:
Object o = irgendwas;
if (verarbeiteKlasse1) {
  Klasse1 k1 = (Klasse1) o;
  operationDieKlasse1Erwartet(k1);
} else if (verarbeiteKlasse2) {
  Klasse2 k2 = (Klasse2) o;
  operationDieKlasse2Erwartet(k2);
} else {
....
}
ist ein korrekter Code
Code:
Klasse?? k?? = irgendwas;
if (verarbeiteKlasse1) {
  operationDieKlasse1Erwartet(k??);
} else if (verarbeiteKlasse2) {
  operationDieKlasse2Erwartet(k??);
} else {
....
}
hat dagegen mit seriösen Programmiersprachen in dieser Welt nix zu tun
 

Refl

Mitglied
Die Entscheidung mit welcher Klasse ich arbeite treffe ich über den Array in dem wie schon gesagt eine Liste der entsprechenden Klassen (als String) enthalten ist.
 

Fancy

Aktives Mitglied
Wenn Du, als welchem Grund auch immer, dein Objekt nicht zu einem konkreten Objekt casten willst, kannst Du alternativ auch die Reflection Api weiter nutzen um bis an die Methoden und Felder deiner dynamisch erzeugten Objekte zu kommen.

Z.B.:

Code:
public class Dyn1{

    public final String data = "Dyn1 Data";


    public String getMyResult(){
        return this.data;
    }

}


Code:
import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class Test{


    private String call(String classpath, String method){
        try{
            final Class<?> cclass = Class.forName(classpath);
            final Object o = cclass.newInstance();
            final Method m = cclass.getMethod(method, (Class[])null);
            return (String)m.invoke(o, (Object[])null);
        } catch(final Exception e){
            System.err.println(e);
            return null;
        }
    }


    private String get(String classpath, String field){
        try{
            final Class<?> cclass = Class.forName(classpath);
            final Object o = cclass.newInstance();
            final Field f = cclass.getDeclaredField(field);
            return (String)f.get(o);
        } catch(final Exception e){
            System.err.println(e);
            return null;
        }


    }


    public static void main(String[] args){

        final String resultV1 = new Test().call("Dyn1", "getMyResult");
        System.out.println(resultV1);

        final String resultV2 = new Test().get("Dyn1", "data");
        System.out.println(resultV2);
    }


}

Aber auch da hast Du das Problem das Du irgendwann wieder auf einen gemeinsamen Nenner musst. Und spätestens da wäre dann wieder dein Cast (im Beispiel: (String)m.invoke(o, (Object[])null); und (String)f.get(o); )

Gruß,
Michael
 
G

Guest

Gast
hallo...

ich weiss nicht ob's hilft

abc sind suklassen von buchstaben und auf buchstaben casten

mehr fehlt mir nicht ein
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
N Ermitteln welchen Typ ein "Object"-Objekt enthält Allgemeine Java-Themen 11
K Cast ohne neues Object zu erzeugen Allgemeine Java-Themen 12
D Object in int casten Allgemeine Java-Themen 7
N Object-Array mit Comparator absteigend sortieren? Allgemeine Java-Themen 10
D Object to Long casting Allgemeine Java-Themen 9
G Object mit static Feldern speichern Allgemeine Java-Themen 9
D vergleichbare Object-Objekte generisch vergleichen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben