0

我不明白为什么会出现此编译错误

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 子类对象作为参数?

4

1 回答 1

4

Chassis.class是 的一个实例java.lang.Class,它只扩展java.lang.Object.

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

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

protected <T extends Resource> has element(Class<T> v) {
    return new has<T>(v) {};
}
于 2012-12-04T03:23:21.727 回答