最佳答案
公认的 这个问题答案描述了如何在 Generic<T>
类中创建 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
。是否有其他传递相同信息的方法?