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% 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.
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%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%Tags und Links java