[英]How to write Java generic method with E… elements and return List<E>
我想寫一個方法如下
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);
我該如何解決這個問題? 謝謝 !
如果我了解你,那么你可以使用通配符( 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;
}
好像你在類型推理片上被絆倒了。 它將其余元素綁定到Class extends Comparable & Serializable
(來自編譯器錯誤)。
您可以通過在通用列表中添加wildcard-extends子句來解決此問題; 你只關心那些實際上可以被分配為Class
元素。
List<? extends Class> c = ListUtils.newList(String.class,Long.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.