我该如何用Java编写此代码?
public class ComponentsManager
{
private List<IComponent> list = new ArrayList<IComponent>();
public <U extends IComponent> U GetComponent() {
for (IComponent component : list) {
if(component instanceof U)
{
return component;
}
}
}
}
但我不能对泛型类型执行instanceof。我该怎么办?
谢谢。
最佳答案
基本上,由于类型擦除,您无法执行此操作。正常的解决方法是传递Class
对象作为参数。例如
public <U extends IComponent> U GetComponent(Class<U> clazz) {
for (IComponent component : list) {
if (clazz.isInstance(component)) {
return clazz.cast(component);
}
}
}
您也可以使用
if (clazz.equals(component.getClass())) { ...
,但是可以进行精确的类型匹配……这不是instanceof
运算符所做的。 instanceof
运算符和Class.instanceOf
方法都测试以查看该值的类型是否与赋值兼容。