2012-03-08 72 views
-5
public class demo 
{ 

    private final List<E> blah; 

    public demo(final List<E> result) 
{ 
    super(); 
    this.blah= Collections.unmodifiableList(result); 
    } 

public List<E> getResult() 
{ 
    return blah; 
} 
public static void main(final String args[]) 
{ 
    final demo d = new demo(Collections.EMPTY_LIST);.....1 
    System.out.println(d.getResult().get(0)); 
} 
    } 

会发生什么事,为什么得到的第一个元素。什么是turaround。如果我尝试做第1行,是否丧失了通用性?尝试从空收集

回答

0

它会抛出和IndexOutOfBoundsException。你为什么不测试它?

0

先测试它是否为空...此外,EMPTY_LIST不是类型安全的。

final List<String> list = Collections.emptyList(); 
if (!list.isEmpty()) { 
    System.out.println(list.get(0)); 
} 
0
final List<String> list = Collections.EMPTY_LIST; 

这将创建一个空的列表,这意味着它的大小为0之后,你叫

list.get(0) 

导致ArrayIndexOutOfBoundsException异常

2

我觉得你的问题是错误的概念。

是比较奇怪在Collection的具体位置来访问元素。这意味着您确定在特定的位置上有一个特定的元素。一个集合总是一些类型的元素。只访问特定的元素,就可以为特定元素提供一些特定的含义。这是如果你想要像get(i)for的特定元素特定的接入与

for(Object o: collection){...} 

遍历集合好习惯,你总是必须检查是否该元素存在。喜欢的东西

if(collection.size() > i) 
{ 
//do operation 
} 

总体思路:您可以使用Map,其中具有特定的含义(键)元素映射到这个意思(关键)。

编辑:刚才检查,EMPTY_LIST是不可改变的,如果你想能够添加元素(然后用一些get(i)访问它们),你必须像一个正常的列表

final List<String> list = new ArrayList<String>(); 
+0

+1创建它试图解释一个形成严重的问题。 – epoch 2012-03-08 12:47:12