Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

per Reflection Instanz einer inneren Klasse erzeugen

6 views
Skip to first unread message

Jochen Theodorou

unread,
Oct 16, 2008, 1:19:57 PM10/16/08
to
Hi

also wenn ich

public class X {
public class Y { int z ; }
}

habe und eine Instanz von Y bräuchte und das mit Reflection machen
will... wie mache ich dass dann? Ich stehe gerade ein wenig auf dem
Schlauch.

Gruss theo

Patrick Roemer

unread,
Oct 16, 2008, 1:48:43 PM10/16/08
to
Responding to Jochen Theodorou:

> also wenn ich
>
> public class X {
> public class Y { int z ; }
> }
>
> habe und eine Instanz von Y bräuchte und das mit Reflection machen
> will... wie mache ich dass dann?

Y.class.getConstructor(X.class).newInstance(x) ?

Viele Gruesse,
Patrick

Wolfgang Zitzelsberger

unread,
Oct 16, 2008, 1:47:48 PM10/16/08
to
> habe und eine Instanz von Y bräuchte und das mit Reflection machen
> will... wie mache ich dass dann? Ich stehe gerade ein wenig auf dem
> Schlauch.

Kann die Lösung wirklich so einfach sein? Warum nicht X$Y :-)

Cheers,
Wolfgang

--
www.javasoft.de

Florian Weimer

unread,
Oct 16, 2008, 1:58:03 PM10/16/08
to
* Jochen Theodorou:

> Hi
>
> also wenn ich
>
> public class X {
> public class Y { int z ; }
> }
>
> habe und eine Instanz von Y bräuchte und das mit Reflection machen
> will... wie mache ich dass dann?

Class#getDeclaredClasses() vermutlich.

Andreas Eberhöfer

unread,
Oct 16, 2008, 1:58:50 PM10/16/08
to
Hi Jochen,

Jochen Theodorou schrieb:


Bei inneren Klassen gibt es implizit einen Konstruktor, der das äußere
Objekt, also eine Instanz von X, mit übergibt. Wusste ich bis jetzt auch
nicht ;) hab ein bisschen mit java.lang.reflect.Constructor rumgespielt
und mir den Konstruktor von Y angesehen.

Ich hab mal in der Klasse X eine createY-Methode geschrieben.

public Y createY()
{
Class c = Class.forName("X$Y");
Constructor con = c.getConstructors()[0];
return (Y) con.newInstance(this);
}

Damit funktioniert das was du willst. Wenn du das von Außen machen
willst, musst du halt statt this eine andere Instanz von X übergeben.

mfg
Andreas

Jochen Theodorou

unread,
Oct 16, 2008, 5:08:36 PM10/16/08
to
Wolfgang Zitzelsberger schrieb:

>> habe und eine Instanz von Y bräuchte und das mit Reflection machen
>> will... wie mache ich dass dann? Ich stehe gerade ein wenig auf dem
>> Schlauch.
>
> Kann die Lösung wirklich so einfach sein? Warum nicht X$Y :-)

so heisst natürlich die Klasse, das wusste ich schon

Gruss theo

Jochen Theodorou

unread,
Oct 16, 2008, 5:09:07 PM10/16/08
to
Patrick Roemer schrieb:

... sag ja, ich steh auf dem Schlauch... danke ;)

Gruss theo

Jochen Theodorou

unread,
Oct 16, 2008, 5:10:43 PM10/16/08
to
Andreas Eberhöfer schrieb:

> Hi Jochen,
>
> Jochen Theodorou schrieb:
>> Hi
>>
>> also wenn ich
>>
>> public class X {
>> public class Y { int z ; }
>> }
>>
>> habe und eine Instanz von Y bräuchte und das mit Reflection machen
>> will... wie mache ich dass dann? Ich stehe gerade ein wenig auf dem
>> Schlauch.
>
> Bei inneren Klassen gibt es implizit einen Konstruktor, der das äußere
> Objekt, also eine Instanz von X, mit übergibt. Wusste ich bis jetzt auch
> nicht ;) hab ein bisschen mit java.lang.reflect.Constructor rumgespielt
> und mir den Konstruktor von Y angesehen.

das äussere Objekt wird übergeben... eigentlich logisch, trotzdem...
sigh... mich grausts vor Groovy 1.7 wenn ich innere Klassen für Groovy
implementieren soll...

> Ich hab mal in der Klasse X eine createY-Methode geschrieben.
>
> public Y createY()
> {
> Class c = Class.forName("X$Y");
> Constructor con = c.getConstructors()[0];
> return (Y) con.newInstance(this);
> }
>
> Damit funktioniert das was du willst. Wenn du das von Außen machen
> willst, musst du halt statt this eine andere Instanz von X übergeben.

thx

Gruss theo

Sven Köhler

unread,
Oct 19, 2008, 7:30:12 AM10/19/08
to
Wolfgang Zitzelsberger schrieb:

>> habe und eine Instanz von Y bräuchte und das mit Reflection machen
>> will... wie mache ich dass dann? Ich stehe gerade ein wenig auf dem
>> Schlauch.
>
> Kann die Lösung wirklich so einfach sein? Warum nicht X$Y :-)

Es ist keine static nested class. Daher muss Y eine Instanz von X
übergeben werden - oder so ähnlich.

0 new messages