我相信我犯了一个非常简单的错误/忽略了一些微不足道的事情。
import java.util.Comparator;
public class NaturalComparator<Integer> {
public int compare(Integer o1, Integer o2) {
return o1.intValue() - o2.intValue();
}
}
编译时收到以下错误。
NaturalComparator.java:6: error: cannot find symbol
return o1.intValue() - o2.intValue();
^
symbol: method intValue()
location: variable o1 of type Integer
where Integer is a type-variable:
Integer extends Object declared in class NaturalComparator
NaturalComparator.java:6: error: cannot find symbol
return o1.intValue() - o2.intValue();
^
symbol: method intValue()
location: variable o2 of type Integer
where Integer is a type-variable:
Integer extends Object declared in class NaturalComparator
2 errors
为什么我无法访问整数类中的 intValue()方法?
答案 0 :(得分:8)
shadowing类型为java.lang.Integer
的类型参数变量,您决定将其命名为Integer
。
您的代码等同于
public class NaturalComparator<T> {
public int compare(T o1, T o2) {
return o1.intValue() - o2.intValue();
}
}
由于Object
(T
的界限)未声明intValue()
方法,因此显然无法编译。
你想要的是
public class NaturalComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o1.intValue() - o2.intValue();
}
}
在这种情况下java.lang.Integer
用作类型参数。
答案 1 :(得分:3)
您不小心创建了一个与Integer
类无关的泛型类型参数Integer
,并且您没有实现Comparator
。尝试
public class NaturalComparator implements Comparator<Integer>
在类声明的<>
中放置一个标识符声明了一个泛型类型参数,但在implements {extends子句中的<>
中放置一个标识符是传递一个类型参数。