【发布时间】:2012-02-07 00:25:45
【问题描述】:
我需要在 Java 中有这样的 GADT,比如
interface Action<C, O> {
Collection<O> doAction(C<O> predicate)
}
这样我就可以轻松地声明类
class Selector<T> {
...
}
然后将其与接受 Selector 实例的 Action 的实现一起使用。并且 Action 的实现也接受 Predicate - 但参数的类型必须与集合的返回类型匹配。
主要思想是让一种类型依赖于另一种类型。这在普通的旧 Java 6 中可能吗?
【问题讨论】:
-
我不确定我是否跟随。我认为您可以将
Action定义为Action<O, C<O>>(尽管您也可以将C用于predicate的类型)。与大多数语言一样,Java 不支持高阶类型。 -
@TomHawtin-tackline Action
> 是无效定义。 -
你不能仅仅因为 C 是泛型就不能保证 C 是 O 的泛型类型。你可以指定 C 从特定类扩展或实现可以包含 O 的特定接口。你能提供有关 C、O 的更多信息?
-
Action<O,C<O>>。呃,是的。interface Action<C, O> { Collection<O> doAction(C predicate); }.