我相信我犯了一个非常简单的错误/忽略了一些琐碎的事情。
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
为什么我无法访问 Integer* 类中的 intValue() 方法? *
您正在使用决定命名的类型参数变量来遮盖该类型。java.lang.Integer``Integer
java.lang.Integer``Integer
您的代码等同于
public class NaturalComparator<T> { public int compare(T o1, T o2) { return o1.intValue() - o2.intValue(); } }
显然不会编译,因为Object(的边界T)没有声明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,用作类型参数。
java.lang.Integer