La réponse acceptée à la question cette question décrit comment créer une instance de T
en el Generic<T>
classe. Il s'agit de passer un Class<T>
au paramètre Generic
et en appelant le newInstance
de cette méthode.
Une nouvelle instance de Generic<Bar>
est alors créé, et le paramètre Bar.class
est transmise.
Que faites-vous si le paramètre de type générique pour le nouveau Generic
n'est pas une classe connue comme Bar
mais est lui-même un paramètre de type générique ? Supposons que j'aie une autre classe Skeet<J>
et je voulais créer une nouvelle instance de Generic<J>
à l'intérieur de cette classe. Ensuite, si j'essaie de passer dans J.class
J'obtiens l'erreur de compilation suivante :
cannot select from a type variable.
Existe-t-il un moyen de contourner ce problème ?
Le bout de code spécifique qui déclenche l'erreur pour moi est le suivant :
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();
/* ... */
}
/* ... */
}
/* ... */
}
L'erreur se produit parce que je ne peux pas écrire W.class
. Existe-t-il un autre moyen de transmettre la même information ?