なんか変?
配列だと怒られない不思議。
$ 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 ? になると思ったのだけれど。この辺の規格は複雑すぎて読めない…。