簡體   English   中英

如何用E ...元素編寫Java泛型方法並返回List <E>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM