泛型方法在Java中的绑定不匹配 [英] Bound mismatch in Java for generic method
问题描述
我无法理解为什么我得到这个编译错误
绑定不匹配:泛型方法
元素(T)
类型资源
不是
适用于参数(Class< Chassis> code>)。推断出的
类型Class
不是
有界参数的有效替代< T extends Resource>
。
使用以下代码:
public class Resource {
受保护的抽象类具有< T扩展资源> {
public has(T v){}
}
保护< T扩展资源>具有元素(T v){
return new has< T>(v){};
}
}
class Car扩展资源{
has chassis = element(Chassis.class);
}
class底盘扩展资源{
}
<为什么这是无效的? Chassis
扩展资源
,为什么不匹配< T extends Resource>
?
我怎么能约束element()方法接受Resource类对象或任何Resource子类对象的参数?
java.lang中的一个实例.class
,它只扩展 java.lang.Object
。
< T extends Resource>
需要一个实际的 Resource
(或其中一个子类)。
为了解决这个问题,你可以改变你的方法声明为:
protected< T延伸资源>具有元素(Class< T> v){
return new has< T>(v){};
}
I can't understand why I'm getting this compilation error
Bound mismatch: The generic method
element(T)
of typeResource
is not applicable for the arguments (Class<Chassis>
). The inferred typeClass<Chassis>
is not a valid substitute for the bounded parameter<T extends Resource>
.
with the following code:
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 {
}
Why is this invalid? Chassis
extends Resource
, so why doesn't match to <T extends Resource>
?
And how could I constraint element() method to accept as an argument a Resource class object or any Resource subclass object?
Chassis.class
is an instance of java.lang.Class
, which only extends java.lang.Object
.
The <T extends Resource>
expects an actual instance of Resource
(or one of its subclasses).
To solve this, you can change your method declaration to the following:
protected <T extends Resource> has element(Class<T> v) {
return new has<T>(v) {};
}
这篇关于泛型方法在Java中的绑定不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!