kmizuさんのエラーの例の意味が最初分からなかった。
(lessThanというメソッド名なのに==で判定しているのがおかしいのかな?と思ったけど、そこは本題ではなかった)
cocoa_rutoさんのツイートで可視性に言及されていて、ようやく意味が分かった。
つまり、“自分を継承したサブクラス”として宣言した変数では、自分のprivateメンバーにアクセスできない。わざわざ自分自身にキャストしてやればアクセスできるようになる。
kmizuさんのソースでは、型TはFooを継承したサブクラスとなっている。(ジェネリクスのextends)
なので、Tの変数fooでは、FooのprivateメンバーであるaValueにアクセスできない(foo.aValueが不可視であり、コンパイルエラーになる)
うーん、こんな可視性の問題があったんだなぁ。Javaでもまだまだ知らない事が多い。
※コメント投稿者のブログIDはブログ作成者のみに通知されます