【问题标题】:Error calling generic method调用泛型方法时出错
【发布时间】:2013-12-03 15:57:39
【问题描述】:

我有两个通用类

class Value<T>{...}

class Parameter<T>{...}

我想从另一个类(参数)调用一个方法

    public <T> void put(Parameter<T> key, Value<T> value) {
    parameters.put(key, value);
}

从我的主类中,我想用两个对象 Value 和 Parameter 来调用它,但是用这种方式使用 Type:

 Value<Integer> v1 = new Value<Integer>(2);
 Parameter<Integer> p1 = new Parameter<Integer>(3);
 Params params = new Params();
 params.put(p1,v1);

我从 Eclipse 收到这个错误:

The method put(Parameter<T>, Value<T>) in the type Parameters is not applicable for the arguments (Parameter<Integer>, Value<Integer>)

任何提示我如何调用此方法而不会出现此错误?这些类不是我开发的,所以我试图调用它们但没有成功。

【问题讨论】:

  • T 是否有任何限制?
  • 对 T @JeroenVannevel 施加约束是什么意思?我在 Params 类开始时看到的唯一奇怪的是:@SuppressWarnings("rawtypes")。
  • 泛型声明没问题。您确定您没有多个名为 ParameterValue 的类,并且您使用来自一个包的类,而 Params 类中的方法期望来自不同包的实例?
  • @jambjo 你是对的,我意识到我正在使用来自同一个包和一个 jar 中的一个库的类 Value,所以现在删除我包中的类没有错误。跨度>

标签: java class generics methods


【解决方案1】:

编译器无法派生出你的类是什么,所以你必须给它一个提示:

params.<Integer>put(p1,v1);

将 Params 类设为通用不是有意义吗?

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多