0
public class Main {
    public static void main(String[] args) {
        List<Object[]> list = getIt();

//        unsuccessful iteration, throws ClassCastException
        for (Object id : list) {
            System.out.println(id);
        }

//        successful iteration  
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

    private static List<Object[]> getIt() {
        List list = new ArrayList();
        list.add(1L);
        return list;
    }
}

何が起こるかは大まかな見積もりで理解していますが(コンパイラによって生成されたイテレータには明示的なキャストが含まれています)、いくつかの良い答えが欲しいです、ありがとう。

4

2 に答える 2

1

これをJava7で実行すると、ClassCastExceptionが発生しません。また、オブジェクトがObjectmain()のようにキャストされるため、発生することも期待できません。

于 2012-07-13T12:55:02.990 に答える
0

ええと、それはJavaコンパイラが隠れて次のようなsmthを生成するためだと思います:

Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println((Object[])iterator.next());
        }

明示的なキャストによりエラーが発生します。一般に、これはジェネリックと生の型を混在させることの問題ですが、既に述べたように、ここではベスト プラクティスについては触れません。

于 2012-07-13T14:22:59.117 に答える