我无法理解为什么我收到此编译错误
绑定不匹配:类型
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子类对象作为参数?
答案 0 :(得分: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) {};
}