Java中的参数化类型(GADT)

时间:2012-01-10 15:34:55

标签: java generics gadt

我需要在Java中使用这种GADT,比如

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

所以我可以很容易地声明类似

class Selector<T> {
...
}

然后将其与Action接受Selector实例的实现一起使用。并且还实现了Action接受谓词 - 但参数类型必须匹配集合的返回类型。

主要思想是让一种类型依赖另一种类型。这在普通的旧Java 6中是否可行?

1 个答案:

答案 0 :(得分: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> {
}