我该如何用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方法都测试以查看该值的类型是否与赋值兼容。

08-05 12:35