2012-03-08 9 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の特定の位置で要素にアクセスするのはむしろ奇妙です。これは、特定の位置に特定の要素があることを確信していることを意味します。コレクションは常にいくつかの型の要素のグループです。特定の要素にのみアクセスすると、その特定の要素に特定の意味が与えられます。あなたがforのうちget(i)などの特定の要素に固有のアクセスをしたい場合は、その要素が存在する場合、あなたは常に確認する必要があり

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

でコレクションを反復することをお勧めします。

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

一般的な考え方のような何か:あなたは特定の意味(キー)を持つ要素がこの意味(キー)にマッピングされMapを、使用することができます。

EDIT:あなたがしようとするために、通常の一覧

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

1のようにそれを作成する必要があります(一部get(i)とそれらへのアクセス当時と)要素を追加できるようにしたい場合はちょうどチェックし、EMPTY_LISTは、不変ですひどく形成された質問を説明してください。 – epoch

関連する問題