Dynamische Instanzerstellung ohne Generika

8

Ich würde gerne verstehen, warum das Folgende nicht funktioniert:

%Vor%

Ich kenne den richtigen Weg, dies zu erreichen, indem ich das Argument newInstance als Klasse & lt; T & gt; deklariere, möchte aber verstehen, warum es nicht wie oben beschrieben durchgeführt werden kann.

UPD: Hier ist die Ausnahme, die ich bekomme:

%Vor%     
azerole 06.02.2010, 18:17
quelle

4 Antworten

6

Konstruktoren für innere Klassen haben ein verstecktes erstes Argument, das Sie angeben müssen, wenn Sie die Reflektion verwenden. Übergeben Sie eine Instanz der äußeren Klasse.

Anstelle von

%Vor%

verwenden:

%Vor%     
Kevin 06.02.2010, 18:31
quelle
1

Das Problem scheint zu sein, dass es sich um eine nicht statische Member-Klasse handelt, da es sowohl funktioniert, wenn Sie MyClass als statisch deklarieren, als auch, wenn Sie es zu einer Klasse der obersten Ebene machen. Nicht ganz sicher, warum.

    
Fabian Steeg 06.02.2010 18:29
quelle
1

Sehr gute Frage!

Dies liegt daran, dass die innere Klasse in jedem Konstruktor ein implizites Argument hat - ihre äußere Klasse. Daher hat es keinen Standardkonstruktor.

Um eine Instanz davon zu erhalten, müssen Sie sie instanziieren, indem Sie die äußere Klasse als Argument übergeben.

%Vor%     
Bozho 06.02.2010 18:31
quelle
0

Die newInstance-Methode in einem Klassenobjekt funktioniert nur für eine konkrete Klasse mit einem arg-Konstruktor.

Wenn Sie MyClass als statisch ändern, würde es sich qualifizieren und der Code würde funktionieren. So wie es ist, hat es einen impliziten Konstruktor mit dem äußeren Objekt als Parameter und hat keinen arg-Konstruktor.

Sie können Ihre eigene newInstance-Methode verwenden, indem Sie die newInstance-Methode des Konstruktors verwenden:

%Vor%     
Don Roby 06.02.2010 19:31
quelle

Tags und Links