Portal > Foren > Java > Allgemeine Java-Programmierung > Reflexion mit parametrisiertem Konstruktor
Antwort
 
Themen-Optionen
Alt 18.02.2005, 13:58 Nach oben    #1
Benutzer
 
Benutzerbild von ehli75
 
Registriert seit: 30.11.2004
Beiträge: 97
Standard Reflexion mit parametrisiertem Konstruktor

Hi ...

kann man bei der Instanziierung eines Objketes via Reflexion auch einen Konstruktor mit Prametern aufrufen ?
Bis jetzt hab ich es immer so gemacht:

PHP-Code:
try{
   Class 
= Class.forName"NameDerKlasse");
   
Constructor cons c.getConstructor(null);
   
Klasse temp = (Klasse)cons.newInstance(null);
   
temp.doSomething();
}            
catch( 
Exception ex ){
...

Dafür benötige ich aber auch jeden Fall einen parameterlosen Konstruktor ... nun möchte ich aber einen Konstruktor mit Paremtern verwenden ... eigentlich müsste das doch irgendwie gehen ... aber im Moment weiss ich echt nicht weiter.

Michael
ehli75 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.02.2005, 14:47 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Warum kannst Du denn nicht anstatt "null" das angeben, was Du möchtest?

Soll gar keine Lösungshilfe darstellen, sondern ist eine Frage an Dich *g*
Muss erstmal verstehen, was da geschieht .. eventuell komme ich dann auf eine Idee

Danke Dir ..
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.02.2005, 15:46 Nach oben    #3
LordOfCodes
Gast
 
Beiträge: n/a
Standard

Ja, man kann:

Code:
try{
   Class[] parameters = new Class[]{ String.class, Integer.class };
   Object[] values  = new Object[]{ "asdfasdf", new Integer(1234) };
   Class c = Class.forName( "NameDerKlasse");
   Constructor cons = c.getConstructor(parameters);
   Klasse temp = (Klasse)cons.newInstance(values);
   temp.doSomething();
}            
catch( Exception ex ){
...
}
Greets
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.02.2005, 17:25 Nach oben    #4
Benutzer
 
Benutzerbild von ehli75
 
Registriert seit: 30.11.2004
Beiträge: 97
Standard

DANKE !!
Das funzt ja richtig gut.
Wenn ich das jetzt richtig sehe, darf man allerdings keinen Konstruktor haben, der einen simplen Datentyp erwartet (int, double ...), sondern muss dann die Wrapperklassen benutzen. ... aber damit kann ich leben ...

DANKE nochmal !!


Michael
ehli75 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2005, 00:29 Nach oben    #5
LordOfCodes
Gast
 
Beiträge: n/a
Standard

Also in der Definition der Parameter (also Class[]) wäre man eigentlich frei (da man ja z.B. Integer.class oder Boolean.class verwenden könnte) aber, ja, bei der effektiven Übergabe der Werte ist man schon an die Wrapperklassen gebunden.. Aber das ist allgemein ein Schwachpunkt/eine Einschränkung der reflection api..

Falls du weitere Fragen zur reflection api hast, bitte hier posten, dann haben alle Leser den optimalen Zusammenhang zum Thema..

Greets
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2005, 01:29 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Zitat:
Zitat von LordOfCodes
Integer.class oder Boolean.class
Hm, aber da nutzt man doch auch die Wrapperklassen, oder sehe ich das falsch?
Irgendwie verstehe ich den "Übergang" von der ersten Aussage zu dieser hier nicht
Zitat:
Zitat von LordOfCodes
bei der effektiven Übergabe der Werte ist man schon an die Wrapperklassen gebunden
Wie gesagt ... im ersten Zitat nutzt Du doch auch die Wrapperklassen.

Zitat:
Zitat von LordOfCodes
ein Schwachpunkt/eine Einschränkung der reflection api..
Warum würdest Du das als Schwachpunkt ansehen?
Weil man eben die primitiven Datentypen nicht direkt übergeben kann?
Hm .. irgendwie wäre es mir ja manchmal fast Recht, wenn es gar keine primitiven Datentypen gäbe *g*


Danke für die Infos.

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2005, 13:30 Nach oben    #7
LordOfCodes
Gast
 
Beiträge: n/a
Standard

Hmm.. hab mich falsch ausgedrückt.. und dazu noch falschen code geschrieben..

Ich meinte natürlich folgendes:
Wenn man eine Methode / einen Konstruktor aufrufen will, der primitive Typen als Parameter annimt, dann muss man das so machen:
Code:
try{
   Class[] parameters = new Class[]{ Long.TYPE };
   Object[] values  = new Object[]{new Long(System.currentTimeMillis())};
   Class c = Class.forName( "java.util.Random");
   Constructor cons = c.getConstructor(parameters);
   Klasse temp = (Klasse)cons.newInstance(values);
   temp.doSomething();
}            
catch( Exception ex ){
...
}
Also mit Long.TYPE muss ich der api sagen, dass ich einen "primitiven" Parameter angeben will, bei der Wertübergabe muss man den Wert aber dann in die Wrapperklasse füllen.

Ich hoffe, du weisst jetzt was ich meine.

Greets
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2005, 18:10 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Ja, denke ich bin etwas weitergekommen.

Ich verstehe allerdings diese Zeilen hier irgendwie nicht.
Code:
   Class[] parameters = new Class[]{ Long.TYPE };
   Object[] values  = new Object[]{new Long(System.currentTimeMillis())};
Du erstellst ein Array "parameters" vom Typ "Class" .. und sagst dann, dass das Array Werte vom Typ "long" erwartet, indem Du Wrapperklasse benutzt und das explizit mit
Code:
Long.TYPE
angibst, ja?
Die zweite Zeile füllt dann das Array "values". Da dürfen nur "Objects" sein .. deshalb castest Du auch das Ergebnis von
Code:
System.currentTimeMillis()
Okay. Stimmt das so?
Ich frage mich jetzt .. warum überhaupt ein Array? :confused:

Man braucht also eigentlich zwei Schritte, um einen durchzuführen, weil eben "long" & Co. primitiv sind ... ja?

Danke nochmals

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2005, 12:15 Nach oben    #9
Fuzzy
Gast
 
Beiträge: n/a
Standard

Die Frage "warum ein Array" ergibt sich aus den beiden folgenden Zeilen:

Code:
   Constructor cons = c.getConstructor(parameters);
   Klasse temp = (Klasse)cons.newInstance(values);
}            
catch( Exception ex ){
...
}
getConstructor() erwartet als Parameter ein array of classes und newInstance ein array of objects, auch wenn nur ein Element gebraucht wird.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2005, 13:26 Nach oben    #10
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hmpf. Mist ... ich hab mir sogar den Eintrag in der API durchgelesen ... *ploink*

Danke.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Insert-Macro für jEdit (Konstruktor, Getter, Setter einfügen) pago Literatur 2 12.05.2005 09:09
Insert-Macro für jEdit (Konstruktor, Getter, Setter einfügen) pago Projekte unserer Mitglieder 1 11.05.2005 23:28


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:42 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44