Adi*_*be7 15 java generics reflection
我怎么能用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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法对泛型类型执行instanceof.我该怎么办?谢谢.
Ste*_*n C 23
基本上,由于类型擦除,你不能这样做.正常的解决方法是将Class
对象作为参数传递; 例如
public <U extends IComponent> U GetComponent(Class<U> clazz) {
for (IComponent component : list) {
if (clazz.isInstance(component)) {
return clazz.cast(component);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用,if (clazz.equals(component.getClass())) { ...
但这确实是类型匹配...这不是instanceof
运营商所做的.在instanceof
运营商和Class.instanceOf
方法都测试,看看如果值的类型是赋值兼容.
归档时间: |
|
查看次数: |
18268 次 |
最近记录: |