我想写一个方法如下
public static <E> ArrayList<E> newList(E... elements){
ArrayList<E> list = new ArrayList<E>(elements.length);
addAll(list,elements);
return list;
}
当我像这样使用它时它会起作用
List<String> a = ListUtils.newList("a","b");
但在这种情况下无法编译
List<Class> c = ListUtils.newList(String.class,Long.class);
我该如何解决这个问题? 谢谢!
答案 0 :(得分:2)
如果我了解你,那么你可以使用通配符(jls-4.5.1)这样做,
public static void main(String[] vargs) {
List<Class<?>> c = ListUtils.<Class<?>>newList(String.class,Long.class);
}
此外,您发布时newList
无法编译。我认为应该是这样的,
public static <E> List<E> newList(E... elements) {
List<E> list = new ArrayList<E>((elements != null) ? elements.length : 0);
for (E elem : elements) {
list.add(elem);
}
return list;
}
答案 1 :(得分:1)
好像你在类型推理片上被绊倒了。它将其余元素绑定到Class extends Comparable & Serializable
类型(来自编译器错误)。
您可以通过在通用列表中添加wildcard-extends子句来解决此问题;您只关心实际可以指定为Class
的元素。
List<? extends Class> c = ListUtils.newList(String.class,Long.class);