编译器说方法未定义......但它是(我认为)
compiler says method is undefined ... but it is (I thought)
我正在尝试呼叫:
public class Counter<MyClassSelectorObject> {
final HashMap<MyClassSelectorObject, Integer> counts = new HashMap<>();
public void add(MyClassSelectorObject t) {
counts.merge(t, 1, Integer::sum);
t.setCount(counts.get(t));
}
...
}
但是,我在 t.setCount(counts.get(t));
上的 Eclipse 编译器中收到以下错误:
The method setCount(Integer) is undefined for the type MyClassSelectorObject
不过我有
public class MyClassSelectorObject implements Comparable<MyClassSelectorObject>{
...
public void setCount(Integer value) {
this.count = value;
}
...
}
Eclipse 的快速修复功能为我提供的解决方案是将 t 转换为对象,这对我来说毫无意义。再一次,我在离开多年后才重新开始编码,所以我可能会遗漏一些基本的东西。
我正在使用 Java 8 和 Eclipse Luna。
谢谢!
您所做的是声明一个具有通用类型参数的 generic class:
public class Counter<T> {
}
除了你的 T
被称为 MyClassSelectorObject
...
所以你已经用泛型类型参数隐藏了你的 class
,你的方法等同于:
public void add(T t) {
counts.merge(t, 1, Integer::sum);
t.setCount(counts.get(t));
}
由于 T
没有界限,T
等同于 Object
。
正如您已经注意到的,从 Counter
中删除通用类型可以解决您的问题。这引出了问题 - 你为什么首先添加它......?
我正在尝试呼叫:
public class Counter<MyClassSelectorObject> {
final HashMap<MyClassSelectorObject, Integer> counts = new HashMap<>();
public void add(MyClassSelectorObject t) {
counts.merge(t, 1, Integer::sum);
t.setCount(counts.get(t));
}
...
}
但是,我在 t.setCount(counts.get(t));
上的 Eclipse 编译器中收到以下错误:
The method setCount(Integer) is undefined for the type MyClassSelectorObject
不过我有
public class MyClassSelectorObject implements Comparable<MyClassSelectorObject>{
...
public void setCount(Integer value) {
this.count = value;
}
...
}
Eclipse 的快速修复功能为我提供的解决方案是将 t 转换为对象,这对我来说毫无意义。再一次,我在离开多年后才重新开始编码,所以我可能会遗漏一些基本的东西。
我正在使用 Java 8 和 Eclipse Luna。
谢谢!
您所做的是声明一个具有通用类型参数的 generic class:
public class Counter<T> {
}
除了你的 T
被称为 MyClassSelectorObject
...
所以你已经用泛型类型参数隐藏了你的 class
,你的方法等同于:
public void add(T t) {
counts.merge(t, 1, Integer::sum);
t.setCount(counts.get(t));
}
由于 T
没有界限,T
等同于 Object
。
正如您已经注意到的,从 Counter
中删除通用类型可以解决您的问题。这引出了问题 - 你为什么首先添加它......?