2012-03-08 30 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