2016-12-09 6 views
2

私はこのようになります新しいクラスを作成しようとしています:<Generic extends X>型のパラメータを持つクラスを実装することは可能ですか?

public class WikiGraph<V extends Node> implements DirectedGraph<V extends Node> 

これは違法であると思われる、と私は、グラフを拡張し、ノードのサブクラスであるパラメータを使用しようとすると、この問題です。私は次のようなサブクラスを作成しようとしています:

public class WikiGraphWeighted<WeightedNode> implements DirectedGraph<WeightedNode> 

これに対する回避策はありますか?私がしようとしていることは可能なのでしょうか?

+8

'WikiGraph はDirectedGraph 'を実装するだけです。 2番目の ''は、最初に設定したすべての制約を使用します。 – yshavit

+0

ありがとうございました@yshavit、それは解決策のようです! – relisher

+1

'WikiGraph' *の' 'は型パラメータを宣言していますが、' implements DirectedGraph '節は型パラメータを使ってスーパークラスのパラメータ化を記述しています。宣言['class Enum >'](https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html)を見ると、これは直感的ではありません。 'Enum ' 'は、typeパラメータを宣言しますが、 '... extends Enum ' *の内側の ''は、それ自身の宣言の中でtypeパラメータを使います。宣言だけに制約があります。 – Holger

答えて

3

Vの制約は、スコープ内の他の場所で使用されている場合は有効です。

public class WikiGraph< V extends Node > implements DirectedGraph<V> { 

} 
関連する問題