当前位置: 首页 > 知识库问答 >
问题:

Java中泛型方法的绑定失配

贺季同
2023-03-14

绑定不匹配:resource类型的泛型方法元素(T)不适用于参数()。推断的类型不是有界参数 的有效替代品。

使用以下代码:

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 {
}

为什么这个无效?底盘扩展资源,那么为什么与 不匹配呢?

我如何约束element()方法接受资源类对象或任何资源子类对象作为参数?

共有1个答案

沈健
2023-03-14

chassis.classjava.lang.class的实例,它只扩展java.lang.object

需要resource的实际实例(或其子类之一)。

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

protected <T extends Resource> has element(Class<T> v) {
    return new has<T>(v) {};
}
 类似资料:
  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 下面是一个通用搜索算法的实现: 接口: (方括号=弧形括号) 问题出在哪里?我想不通...对泛型参数T也进行了扩展。

  • 本文向大家介绍浅谈java中定义泛型类和定义泛型方法的写法,包括了浅谈java中定义泛型类和定义泛型方法的写法的使用技巧和注意事项,需要的朋友参考一下 1、方法中的泛型 2、定义泛型类 以上这篇浅谈java中定义泛型类和定义泛型方法的写法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 与完全跳过它们相比,在类中使用通配符类型的泛型有什么优势吗? 问题答案: 有很多优点。 他们不会像使用原始类型那样产生编译器警告 它们提供了更多的类型安全性。例如,考虑是否是。如果您使用代替,则可以执行以下操作: 即使该列表仅 应 包含s。如果返回,则您将无法添加 任何 内容(除外),因为列表类型未知。 他们记录的东西与原始类型完全不同,即使用某种 未知但特定的类型进行输入 。

  • 安吉丽卡·兰格(Angelica Langer)在关于仿制药的常见问题解答中说(参见Technicalities.FAQ822): 如果这些方法具有具有不同边界的类型参数,则它们不会重写,因为这些方法的签名不是重写等价的。请记住,类型参数边界是泛型方法签名的一部分。 示例(泛型子类型方法重载泛型超类型方法;不推荐): 我不明白为什么方法在类中重载。据我所知,这应该是一个编译时错误,因为在和中具有相