【问题标题】:Bound mismatch in Java for generic methodJava中泛型方法的绑定不匹配
【发布时间】:2012-12-04 03:21:31
【问题描述】:

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

绑定不匹配:Resource 类型的泛型方法 element(T) 不匹配 适用于参数 (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,那么为什么不匹配 &lt;T extends Resource&gt;

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

【问题讨论】:

    标签: java generics


    【解决方案1】:

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

    &lt;T extends Resource&gt; 需要 Resource(或其子类之一)的实际实例。

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

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

    【讨论】:

    • 谢谢!我添加了另一个问题,那就是如何实现预期的行为?
    • 我相信将方法声明更改为element(Class&lt;T&gt; v) 应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多