2012-01-10 11 views
0

例えばセレクタのインスタンスを受け入れるアクション。また、Action Predicateの実装も実装していますが、引数の型はコレクションの戻り値の型と一致する必要があります。パラメータ化タイプ(GADT)

主な考え方は、あるタイプを別のタイプに依存させることです。それは普通の古いJava 6でも可能ですか?

+0

を。あなたは 'Action'を' Action > 'と定義することができますが、' predicate'の型に 'C'を使うこともできます。 Javaは、ほとんどの言語と同様に、高次型もサポートしていません。 –

+0

@ TomHawtin-tackline Action >は有効な定義ではありません。 – jdevelop

+0

Cはジェネリックであるだけでなく、CがOのジェネリック型であることを保証することはできません.Cが特定のクラスから拡張するか、Oを含むことができる特定のインターフェイスを実装するように指定できます。C、O ? – Cromat

答えて

0

CAction<C, O>であることを強制するものはありません。それ自体はパラメータ化されたタイプです。あなたは例えばAction<String, Object>と宣言することができます - 次にpredicateとは何ですか? String<Object>のようなものはありません。

詳細を知らなくても、何をしたいことは、より具体的なものであるかのように、それは私には見えます、例えば、Predicate<T>インタフェース定義:私は従うことはよく分からない

interface Predicate<T> { 
} 

interface Action<C extends Predicate<O>, O> { 
    Collection<O> doAction(C predicate); 
} 

class Selector<T> implements Predicate<T> { 
}