如何从泛型类型参数获取“.class”属性?
此问题的可接受答案描述了如何在类中创建 的实例。这涉及将参数传递给构造函数并从中调用方法。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