1

私はJavaでGADTのようなものを持っている必要があります

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

だから私は簡単にクラスを宣言することができます

class Selector<T> {
...
}

次に、たとえばセレクターのインスタンスを受け入れるアクションの実装で使用します。また、述語を受け入れるアクションの実装もありますが、引数の型はコレクションの戻り値の型と一致する必要があります。

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

4

1 に答える 1

0

それ自体がパラメータ化されたタイプであるCことを強制するものがないため、これは機能しません。Action<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> {
}
于 2012-03-07T19:31:17.833 に答える