如何从泛型类型参数获取`.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
。还有其他传递相同信息的方式吗?
回答:
使用.class
一个类型参数是不允许的-
因为类型擦除,W
将被
清除 ,以Component
在运行时。InputField
还将需要Class<W>
从呼叫者那里收取,例如InputFieldArray
:
public InputField(String labelText, Class<W> clazz){
super(new String[] {labelText}, clazz);
}
以上是 如何从泛型类型参数获取`.class`属性? 的全部内容, 来源链接: utcz.com/qa/400009.html