1

我需要在 Java 中有这样的 GADT,比如

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

所以我可以轻松地声明类

class Selector<T> {
...
}

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

主要思想是让一种类型依赖于另一种类型。这在普通的旧 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 回答