Java中用于泛型方法的绑定不匹配

时间:2012-12-04 03:21:31

标签: java generics

我无法理解为什么我收到此编译错误

  

绑定不匹配:类型element(T)的通用方法Resource不是   适用于参数(Class<Chassis>)。推断   类型Class<Chassis>不是有效的替代品   有界参数<T extends Resource>

使用以下代码:

public class Resource {
    protected abstract class has<T extends Resource> {
        public has(T v) {}
    }

    protected <T extends Resource> has element(T v) {
        return new has<T>(v) {};
    }
}

class Car extends Resource {
    has chassis = element(Chassis.class);
}

class Chassis extends Resource {
}

为什么这个无效? Chassis扩展了Resource,为什么不匹配<T extends Resource>

我怎样才能约束element()方法接受Resource类对象或任何Resource子类对象作为参数?

1 个答案:

答案 0 :(得分:4)

Chassis.classjava.lang.Class的一个实例,只展开java.lang.Object

<T extends Resource>需要Resource(或其子类之一)的实际实例。

要解决此问题,您可以将方法声明更改为以下内容:

protected <T extends Resource> has element(Class<T> v) {
    return new has<T>(v) {};
}