作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一些方法 header ..
public static <E> void myMethodName(E[], Comparator<E> comparator).
为什么我在尝试调用时会收到类型错误:
myMethodName(int[],
new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) { return e1 - e2; }
}
);
有什么想法吗?
最佳答案
首先,让我们看一些事情。
你有一个泛型方法(虽然它缺少一个变量,但我会忽略它),它需要一个泛型类型。 Java 根据数组的类型为 int
这一事实推断该方法的类型绑定(bind)到 Integer
。
您有一个原始的 int[]
,您将其作为第一个参数提供。在正式签名中,它的类型绑定(bind)为Integer
。
这里的问题是:int[]
不等价于Integer[]
。它们是两个完全不同的对象(因为它们都是数组而不是可以自动装箱的对象)。
避免该问题的正确方法是使用 Integer[]
代替。不过,您放置在数组内的元素将根据自动装箱和转换的规则自动装箱。
关于Java 泛型方法头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472141/
我是一名优秀的程序员,十分优秀!