- - PR -
ジェネリックの書き方について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-28 05:17
以下のコード
interface Foo<E, N extends Foo.Bar<E>> { public interface Bar<E>{} } abstract class AbstractFoo<E, N extends AbstractFoo.AbstractBar<E>> implements Foo<E, N> { public abstract class AbstractBar<E> implements Foo.Bar<E>{} } において,Fooだけだとコンパイルは通りますが,下のAbstractFooについて AbstractFoo.AbstractBar<E> の部分で 型の形式が不適切です。raw 型に指定された型パラメーターです。 というエラーとなります. この点に関してFooの記述とAbstractFooの記述は同じように思うのですけど どうしてこれはエラーとなるのでしょうか また,正しい書き方はどうなるのでしょうか | ||||
|
投稿日時: 2006-01-28 21:20
こちらではこんなメッセージが出ます。
メンバー型 AbstractFoo.AbstractBar<E> は static ではないため、パラメーター化された型で修飾される必要があります。 解決方法は、インナークラスをstaticにするか、インナークラスではなく別々のクラスにすればよいでしょう。 原因はよくわからないです。インナークラスにしている、ということは、内側から外側のフィールドなどが使えるのですが、そのあたりに原因がありそうな・・・ | ||||
|
投稿日時: 2006-01-30 15:44
なるほど,確かにstaticをつけたらうまくできました
それにしてもどうしてこの違いがでてくるのか感覚的には まったく納得がいかないですね 実際にやろうとしているものはstaticな内部クラスなので 結果的には良かったわけですが,サンプルを作ってテストするときに staticはこれには関係ないだろうと思ってはずしてしまったのです. なぜ変わってくるのかわからんです. | ||||
|
投稿日時: 2006-01-30 16:13
非staticなインナークラスは、親オブジェクトへの暗黙の参照を持ちます。
この暗黙の参照を作るためにはEとNの2個のパラメータを渡す必要があるので、 AbstractBarの宣言にもEとNの2個のパラメータが渡されている必要があります。 |
1