この質問に対する受け入れられた回答T
は、Generic<T>
クラスでのインスタンスを作成する方法を説明しています。これには、コンストラクターにClass<T>
パラメーターを渡し、そこからメソッドを呼び出すことが含まれます。 Generic
newInstance
の新しいインスタンスがGeneric<Bar>
作成され、パラメーターBar.class
が渡されます。
新しいGeneric
クラスのジェネリック型パラメーターが既知のクラスのようなものではなくBar
、それ自体がジェネリック型パラメーターである場合はどうしますか? 他のクラスがあり、そのクラス内からSkeet<J>
の新しいインスタンスを作成したいとしますGeneric<J>
。次に、渡そうとするとJ.class
、次のコンパイラ エラーが発生します。
cannot select from a type variable.
これを回避する方法はありますか?
私にとってエラーを引き起こすコードの特定のビットは次のとおりです。
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();
/* ... */
}
/* ... */
}
/* ... */
}
書き込めないのでエラーになりますW.class
。同じ情報を渡す他の方法はありますか?