我需要在Java中使用这种GADT,比如
interface Action<C, O> {
Collection<O> doAction(C<O> predicate)
}
所以我可以很容易地声明类似
class Selector<T> {
...
}
然后将其与Action接受Selector实例的实现一起使用。并且还实现了Action接受谓词 - 但参数类型必须匹配集合的返回类型。
主要思想是让一种类型依赖另一种类型。这在普通的旧Java 6中是否可行?
答案 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> {
}