Java的varargs与泛型
一个使用了varargs的泛型方法如下
1 public static <T> List<T> toList(T... arr)
2 {
3 List<T> list = new ArrayList<T>();
4 for (T t : arr) list.add(t);
5 return list;
6 }
如下调用将产生错误
1 List<Object> objs = Test.toList(1, "two");
原因在于编译器将无法正确推断类型参数,所以正确的做法是显式指明类型参数
1 List<Object> objs = Test.<Object>toList(1, "two");
结论是:如果泛型方法的有一个或多个参数对应于类型参数,并且能够一一对应,那么编译器能正确推断类型参数;如果没有参数或者参数对应于类型参数不同的子类型,那么我们必须显式指明类型参数,否则编译出错。
浙公网安备 33010602011771号