泛型方法在Java中的绑定不匹配 [英] Bound mismatch in Java for generic method

查看:83
本文介绍了泛型方法在Java中的绑定不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法理解为什么我得到这个编译错误


绑定不匹配:泛型方法元素(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子类对象的参数?

解决方案

Chassis.class 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 type Resource is not applicable for the arguments (Class<Chassis>). The inferred type Class<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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆