Die akzeptierte Antwort auf diese Frage beschreibt, wie eine Instanz von T
in der Generic<T>
Klasse erstellt wird. Dies beinhaltet die Übergabe eines Class<T>
Parameters an den Generic
Konstruktor und das Aufrufen der newInstance
Methode von diesem.
Generic<Bar>
Anschließend wird eine neue Instanz von erstellt und der Parameter Bar.class
übergeben.
Was tun Sie, wenn der generische Typparameter für die neue Generic
Klasse keine bekannte Klasse ist, Bar
sondern selbst ein generischer Typparameter ist? Angenommen, ich hätte eine andere KlasseSkeet<J>
und wollte eine neue Instanz Generic<J>
innerhalb dieser Klasse erstellen . Wenn ich dann versuche, weiterzugeben, J.class
erhalte ich den folgenden Compilerfehler:
cannot select from a type variable.
Gibt es einen Weg daran vorbei?
Das spezifische Codebit, das den Fehler für mich auslöst, ist:
public class InputField<W extends Component & WidgetInterface>
extends InputFieldArray<W>
{
public InputField(String labelText)
{
super(new String[] {labelText}, W.class);
}
/* ... */
}
public class InputFieldArray<W extends Component & WidgetInterface>
extends JPanel
{
/* ... */
public InputFieldArray(String[] labelText, Class<W> clazz)
throws InstantiationException, IllegalAccessException
{
/* ... */
for (int i = 0 ; i < labelText.length ; i++) {
newLabel = new JLabel(labelText[i]);
newWidget = clazz.newInstance();
/* ... */
}
/* ... */
}
/* ... */
}
Der Fehler tritt auf, weil ich nicht schreiben kann W.class
. Gibt es eine andere Möglichkeit, dieselben Informationen weiterzugeben?