なんか変?

配列だと怒られない不思議。

$ cat Data.java 
class Data<T> {
    T   scalar;
    T[] array;
    static void assign(Data<?> x) {
        x.scalar = "hoge";
        x.array[0] = "hoge";
    }
}
$ javac Data.java 
Data.java:5: 互換性のない型
検出値  : java.lang.String
期待値  : capture of ?
    x.scalar = "hoge";
               ^
エラー 1 個

どうも x.array は Object[] として処理されているらしい。x は capture conversion で Data<FreshTyVar> 型に変換されているので(多分)、x.scalar も x.array[0] も capture of ? になると思ったのだけれど。この辺の規格は複雑すぎて読めない…。