我试图打电话:
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的quickfix功能为我提供的解决方案是将t转换为Object,这对我来说毫无意义。再说一遍,我在几年之后才回到编码中,所以我可能会遗漏一些基本的东西。
我正在使用Java 8和Eclipse Luna。
谢谢!
答案 0 :(得分:3)
您所做的是宣称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
中删除通用类型可以解决您的问题。这引出了一些问题 - 为什么你首先添加它??