我一直在阅读泛型方法,并认为我理解泛型类型参数如何限制方法参数类型,但是当我用实际代码测试一些想法时,我得到了意想不到的结果。这是一个我不明白的简单通用方法:
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 类型而另一个是输入整数。程序运行时会产生运行时异常(ArrayStoreException)。
最佳答案
在这个例子中,推断类型是 ?扩展 Object[]
,它适合这两种类型。
为了实现你想要的,你需要:
private static <T> void foo(Class<T> clazz, T[] t1, T[] t2);
然后
foo(String.class, stringArray, stringArray); // compiles
foo(String.class, stringArray, integerArray); // fails
关于java - java泛型方法如何约束方法类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4139082/