1

someMethod()返しますCollection<Long>

ArrayList<Long> results = (ArrayList<Long>) someMethod();
Long value = results.get(0);

私は得るClassCastException: java.util.ArrayList cannot be cast to java.lang.LongSystem.out.println(results.get(0));実際に試してみると、例えば が返ってきます[32]。ぜんぜんわかりません。これがLongのArrayListです!なぜget(0)返品するのArrayListですか?

これは次のことに役立ちます。

Object o = results.get(0);
ArrayList<Long> al = (ArrayList<Long>) o;
Long val = al.get(0);

しかし、なぜこれが必要なのですか?

4

1 に答える 1

3

明らかに、宣言された戻り値の型に違反して、someMethod()実際に を返しています。Collection<List<Long>>これは、型の消去によって可能になります。クラス型が正しい限り、コンパイラは問題なく動作します。ジェネリック型は無視できます (コンパイラは警告のみを発生させます)。基本的にこれは のバグですsomeMethod()

于 2012-08-26T19:41:18.680 に答える