如何用E编写Java泛型方法。。。元素和返回列表<;E>;
我想写一个方法如下如何用E编写Java泛型方法。。。元素和返回列表<;E>;,java,generics,Java,Generics,我想写一个方法如下 public static <E> ArrayList<E> newList(E... elements){ ArrayList<E> list = new ArrayList<E>(elements.length); addAll(list,elements); return list; } publicstaticarraylistnewlist(E…元素){ ArrayList=新的ArrayLi
public static <E> ArrayList<E> newList(E... elements){
ArrayList<E> list = new ArrayList<E>(elements.length);
addAll(list,elements);
return list;
}
publicstaticarraylistnewlist(E…元素){
ArrayList=新的ArrayList(elements.length);
addAll(列表、元素);
退货清单;
}
当我像这样使用它时,它就起作用了
List<String> a = ListUtils.newList("a","b");
List a=ListUtils.newList(“a”、“b”);
但在这种情况下它无法编译
List<Class> c = ListUtils.newList(String.class,Long.class);
listc=ListUtils.newList(String.class,Long.class);
我怎样才能解决这个问题?
谢谢大家! 似乎你在类型推断上被绊倒了。它将其余元素绑定到一种类型的
类,该类扩展了可比较和可序列化的(来自编译器错误)
您可以通过在通用列表中添加通配符extends子句来解决此问题;您只关心实际上可以指定为类的元素
List<? extends Class> c = ListUtils.newList(String.class,Long.class);
List如果我理解你的意思,那么你可以用通配符()这样做
newList
编译良好…如果静态导入Collections.addAll
,则需要处理元素
为空。它当前将导致NullPointerException。List>newList(String.class,Long.class)如果您想向列表中添加更多(非空)元素,最好使用“代码>”。@PaulBellora编辑。谢谢这似乎与番石榴中现有的公用设施非常相似。如果您只是需要一个列表,它也非常类似于数组。如果您的问题是关于编译错误的,那么asList
始终提供编译错误。谢谢!我还发现这个语句可以编译:List>newList(String.class,Long.class);那么,这只是一个“使用”问题,而不是一个方法问题吗?
public static void main(String[] vargs) {
List<Class<?>> c = ListUtils.<Class<?>>newList(String.class,Long.class);
}
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;
}