2014-10-20 93 views
0

我如何构造的List<T>构造清单<T>来自枚举<? extends T>

我发现最好的方法是这样的

Enumeration<? extends T> toBeConverted; 
List<T> = new ArrayList<>(Collections.list(toBeConverted)); 

但是,创建一个具有两List(一个在Collections.list方法,并在ArrayList构造等)。有什么方法可以避免临时副本?

(其他的解决办法是:

List<T> list = new ArrayList<T>; 
while (toBeConverted.hasMoreElements) { list.add(toBeConverted.nextElement()); } 

,但我认为这是太冗长....我想和构造如果可能的解决方案)

回答

0

方法Collections.list作出新的ArrayList。

public static <T> ArrayList<T> list(Enumeration<T> e) { 
    ArrayList<T> l = new ArrayList<>(); 
    while (e.hasMoreElements()) 
     l.add(e.nextElement()); 
    return l; 
} 

可以调用没有构造方法仅Collections.list方法。

Enumeration<? extends T> toBeConverted; 
List<T> = (List<T>) Collections.list(toBeConverted); 
+0

即obiously我尝试的第一个,但'列表 = Collections.list(toBeConverted);'不能编译。 – 2014-10-20 11:00:50

+0

@Trollkemada检查我的更新。 – WidWing 2014-10-20 11:02:20

+0

这是铸造'(列表)'总是安全吗?或者它可以抛出一个'ClassCastException'? – 2014-10-20 11:04:42