我一直在閱讀有關泛型方法,並認爲我理解泛型類型參數如何約束方法參數類型,但是當我用實際代碼測試了一些想法時,我得到了意想不到的結果。下面是我不明白一個簡單的通用方法:java通用方法如何約束方法類型參數?
private static <T> void foo(T[] t1, T[] t2){
t2[0] = t1[0];
}
...
String[] stringArray = new String[]{"1", "2", "3"};
Integer[] integerArray = new Integer[]{4,5,6};
foo(stringArray, integerArray);
我本來以爲這個通用方法約束,使得兩個陣列必須是同一類型T的,但在上面的代碼的做法即使一個數組的類型是String而另一個數組的類型是Integer,編譯也很好。程序運行時,會生成運行時異常(ArrayStoreException)。
我不是java專家,但我猜分析器不能告訴foo()接受2個類型T [] s必須是相同的。它看到String []是一個T []類型,Integer []也是一個T []類型。 T應該使用哪一個? – Falmarri 2010-11-09 22:02:09
很好的回答。做得好的SO'ers。 – CurtainDog 2010-11-10 01:07:50
@CurtainDog非常感謝我們盡力而爲;-) – 2010-11-10 09:13:05