无法找到属于对象的方法

时间:2013-12-05 19:29:43

标签: java

我相信我犯了一个非常简单的错误/忽略了一些微不足道的事情。

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()方法?

2 个答案:

答案 0 :(得分:8)

shadowing类型为java.lang.Integer的类型参数变量,您决定将其命名为Integer

您的代码等同于

public class NaturalComparator<T> {

    public int compare(T o1, T o2) {
        return o1.intValue() - o2.intValue();
    }
}

由于ObjectT的界限)未声明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子句中的<>中放置一个标识符是传递一个类型参数。