可能重複:
Java: Array of primitive data types does not autobox爲什麼autoboxing在這種情況下不適用於泛型?
我最近一直在做一些Java(主要是因爲什麼我在大學裏爲我現在的工作做了回顧不涉及任何Java在所有),而一件從未正確介紹給我們的東西是泛型。
我已經做了甲骨文的Java網站上的泛型教程,我一直在用下面的例子難倒我修改了一下:
public static <Integer extends Comparable<Integer>> int countGreaterThan(Integer [] anArray, Integer elem) {
int count = 0;
for (Integer e : anArray)
if (e.compareTo(elem) > 0)
++count;
return count;
}
而且我用這個方法來比較整數數組用下面的整數:
Integer [] numarr = {1, 2, 3, 4 , 5};
Integer num = new Integer(5);
int count = Util.countGreaterThan(arrnum, num);
這似乎是工作正常,但是如果我通過一個基本數組和原始INT,它不會:
int [] arrnum = {1, 2, 3, 4 , 5};
int othernum = 3;
int count = Util.countGreaterThan(arrnum, othernum);
編譯器會抱怨有:
method countGreaterThan in class Generics.Util
cannot be applied to given types;
required: Integer[],Integer
found: int[],int
reason: no instance(s) of type variable(s)
Integer exist so that argument type int conforms to formal parameter type Integer
的教程似乎是很固執的認爲Java將永遠autobox /拆箱的對象和原語爲必要,但它不會做,在這種特殊情況下,我是什麼失蹤?
另外什麼可能是一種很好的方式來儘可能地概括這種比較方法?如果我使用T而不是Integer,那麼它會查找T對象,而不是我傳遞給它的任何東西。
我很抱歉,如果這篇文章令人困惑,並且我對上面提到的東西看起來很無知,那只是我一直主要作爲perl程序員(而且並不是特別有經驗的程序員)並在那裏概括似乎不是一個問題(由於缺乏類型強制執行)。
在此先感謝!
使用'Integer'作爲一個類型變量是一個非常糟糕的主意 – newacct 2012-07-11 18:08:35