this question的接受答案描述了如何在通用< T>中创建T的实例。类。这涉及传递类< T>参数传递给Generic构造函数,并从中调用newInstance方法。
通用< Bar>的新实例然后创建,并传递参数Bar.class。
如果新通用类的泛型类型参数不是一些已知的类,如Bar,但它本身是一个通用类型参数,你该怎么办?假设我有一些其他类Skeet< J>并且我想创建一个Generic< J>的新实例。从那个类里面。然后,如果我尝试传入J.class我得到以下编译器错误:
cannot select from a type variable.
有没有办法解决?
对我来说触发错误的代码的具体位是:
public class InputField
extends InputFieldArray
{
public InputField(String labelText)
{
super(new String[] {labelText}, W.class);
}
/* ... */
}
public class InputFieldArray
extends JPanel
{
/* ... */
public InputFieldArray(String[] labelText, Class clazz)
throws InstantiationException, IllegalAccessException
{
/* ... */
for (int i = 0 ; i < labelText.length ; i++) {
newLabel = new JLabel(labelText[i]);
newWidget = clazz.newInstance();
/* ... */
}
/* ... */
}
/* ... */
}
发生错误,因为我不能写W.class。有没有其他方法传递相同的信息?