我一直在阅读有关泛型方法,并认为我理解泛型类型参数如何约束方法参数类型,但是当我用实际代码测试了一些想法时,我得到了意想不到的结果。下面是我不明白一个简单的通用方法: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