回答編集履歴
1
コードで明示
answer
CHANGED
@@ -4,6 +4,15 @@
|
|
4
4
|
|
5
5
|
`List<?>`では、このリストに`add`する操作を書こうとすれば、型が決まらないのでコンパイルエラーに**なってくれます**。原型の`List`には`add`も成功してしまい、**宣言した型と違う要素を入れられる**という形で型安全性が破綻します。ということで、原型の値を扱うべき場面はありません。
|
6
6
|
|
7
|
+
```java
|
8
|
+
List<String> someList = new ArrayList<String>();
|
9
|
+
List<?> wildList = someList;
|
10
|
+
wildList.add(new Object()); // コンパイルエラーになる
|
11
|
+
|
12
|
+
List rawList = someList;
|
13
|
+
rawList.add(new Object()); // できてしまう
|
14
|
+
```
|
15
|
+
|
7
16
|
例外が2つほどありまして、
|
8
17
|
|
9
18
|
* `Class`オブジェクトを取得したい場合は、原型を使って`List.class`のように書く必要があります。`List<Object>.class`や`List<?>.class`は動きません。
|