回答編集履歴
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`は動きません。
         | 
