2012-03-08 4 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을 의미하고 그 후 당신이는 ArrayIndexOutOfBoundsException

2

결과

list.get(0) 

나는 당신의 질문은 개념적으로 잘못된 생각이라고 .

인가는 Collection의 특정 위치에 요소에 액세스 오히려 이상하다. 이것은 당신이 특정 위치에, 만일 특정 요소가 있다고 확신하는 것을 의미한다. 컬렉션은 항상 어떤 유형의 요소 그룹입니다. 특정 요소에만 액세스하면 특정 요소에 특정 의미를 부여 할 수 있습니다. 그 요소가 존재하는 경우 그것은 당신이 forget(i) 같은 특정 요소에 특정 액세스를 원하는 경우에

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

으로 컬렉션을 반복하는 것이 좋습니다, 당신은 항상 확인해야합니다.

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

일반적인 생각처럼 뭔가 : 당신은 특별한 의미 (키)을 가진 요소가이 의미 (키)에 매핑되는 Map를 사용할 수 있습니다.

편집 : 당신은 당신이하려고에 대한 일반 목록

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

일처럼 만들어야합니다 (일부 get(i)로 접근 한 후 등) 요소를 추가 할 수 있도록하려면 그냥 체크 EMPTY_LIST는, 불변 심하게 형성된 질문을 설명하십시오. – epoch