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");

结论是:如果泛型方法的有一个或多个参数对应于类型参数,并且能够一一对应,那么编译器能正确推断类型参数;如果没有参数或者参数对应于类型参数不同的子类型,那么我们必须显式指明类型参数,否则编译出错。

posted on 2011-12-26 11:09  cssin  阅读(185)  评论(0)    收藏  举报

导航