小编典典

找不到属于对象的方法

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

为什么我无法访问 Integer* 类中的 intValue() 方法? *


阅读 277

收藏
2020-11-26

共1个答案

小编典典

您正在使用决定命名的类型参数变量来遮盖该类型。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,用作类型参数。

2020-11-26