6

この例では

public static void main(String[] args) {

    List<Integer> integers = new ArrayList<Integer>();
    integers.add(1);
    addToList(integers);
    System.out.println(integers);
}


public static void addToList(List list0){
    list0.add("blabl");
}

これにより、結果がコンパイルされて出力されます

[1、ブラブル]

私の理解は次のとおりです。

参照変数「integers」には、addToList メソッドに渡される arraylist オブジェクトのアドレス (111 など) があります。そのため、addToList メソッドの list0 は、オブジェクト (Integer 型の arraylist) を持つ同じアドレスを指し、文字列がこの arraylist オブジェクトに追加されます。

整数型の配列リストに文字列を追加するにはどうすればよいですか? それはデータの整合性の問題ではありませんか?

アップデート

以下の回答とこの回答が役に立ちました。ありがとう。

4

1 に答える 1

6

This is a classic example of Type Erasure. In Java, generics are deleted at compile time and are replaced by casts.

This means that your can do that, but you will get a ClassCastException when you did:

Integer myInt = integers.get(1);

In fact the compiler should warn you when you do that because you are implicitly casting List<Something> to List when you call the method. The compiler knows that it cannot verify the type safety at compile time.

于 2013-06-23T12:38:28.780 に答える