Die akzeptierte Antwort auf diese Frage beschreibt, wie eine Instanz von Tin der Generic<T>Klasse erstellt wird. Dies beinhaltet die Übergabe eines Class<T>Parameters an den GenericKonstruktor und das Aufrufen der newInstanceMethode 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 GenericKlasse keine bekannte Klasse ist, Barsondern 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.classerhalte 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?