【问题标题】:The method insert(String, Class<T>) in the type Data is not applicable for the arguments数据类型中的方法 insert(String, Class<T>) 不适用于参数
【发布时间】:2022-01-21 08:47:58
【问题描述】:

我想要一个接受泛型类型参数的函数,但我收到了使用它的错误消息。如何在 Java 中正确使用泛型?

Plane plane = new Plane();
Car car = new Car();
data.insert("fast", car);
data.insert("super fast", plane);
...
<T> void insert(String a, Class<T> object) {
    System.out.println("Inserting " + object.getName() + a);
}

【问题讨论】:

  • 删除 &lt;T&gt; 并用 Class&lt;?&gt; 替换 Class&lt;T&gt; 你似乎根本没有使用通用参数

标签: java generics


【解决方案1】:

您的插入函数需要像 Plane.class 这样的 Class 对象,这就是已知 object.getName() 的原因。

我认为你的意图是这样的:

<T extends HasName> void insert(String a, T object) {
    System.out.println("Inserting " + object.getName() + a);
}

其中 HasName 是一个接口(也可以是一个超类),使用方法 getName,由 Car 和 Plane 实现(扩展)。 这样才能保证object.getName()可以被调用。

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多