Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编译器说方法未定义。。。但它是(我想)_Java_Compiler Errors - Fatal编程技术网

Java 编译器说方法未定义。。。但它是(我想)

Java 编译器说方法未定义。。。但它是(我想),java,compiler-errors,Java,Compiler Errors,我想打电话: public class Counter<MyClassSelectorObject> { final HashMap<MyClassSelectorObject, Integer> counts = new HashMap<>(); public void add(MyClassSelectorObject t) { counts.merge(t, 1, Integer::sum); t.se

我想打电话:

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));
    }
...
}
但是我有

public class MyClassSelectorObject implements Comparable<MyClassSelectorObject>{

    ...

    public void setCount(Integer value) {
        this.count = value;
    }

    ...

}
公共类MyClassSelectorObject实现可比较{
...
公共void setCount(整数值){
this.count=值;
}
...
}
Eclipse的quickfix特性为我提供的解决方案是将t强制转换为一个对象,这对我来说毫无意义。再说一次,几年后我才重新开始编码,所以我可能会错过一些基本的东西

我正在使用Java8和EclipseLuna


谢谢

您所做的是声明一个具有泛型类型参数的:

public class Counter<T> {

}
由于在
T
上没有边界,
T
相当于
对象


正如您已经注意到的,从
计数器中删除泛型类型可以解决您的问题。这就引出了一个问题-为什么要首先添加它…?

从计数器类的声明中删除泛型似乎可以解决问题,但我仍然不确定为什么(或者这是否是正确的解决方案)。
MyClassSelectorObject
in
class Counter
是名称泛型类型,而不是类的名称。这与在
类计数器中使用
T
相同。这意味着在
add(MyClassSelectorObject t)
MyClassSelectorObject
中也是泛型类型,因此调用
t.setCount
是不可能的,因为
t
是某个未知泛型类型的实例。@Pshemo您的评论是让我理解以下答案的谜题的一部分。谢谢你的帮助!哇,谢谢你们。我的第一个问题得到了回答@Boris原因是我最初编写的计数器是一个泛型类型,它将计算您参数化它的任何类型的实例。后来,我尝试将它简化为只使用MyClassSelectorObject,但我对泛型有点陌生,对语法感到困惑。
public class Counter<T> {

}
public void add(T t) {
    counts.merge(t, 1, Integer::sum);
    t.setCount(counts.get(t));
}