Мне нужно иметь такой тип GADT в Java, как
interface Action<C, O> {
Collection<O> doAction(C<O> predicate)
}
так что я могу легко объявить класс как
class Selector<T> {
...
}
, а затем использовать его с реализацией Action, например, принимающей экземпляр Selector. И реализация Action также принимает Predicate - но тип аргумента должен соответствовать возвращаемому типу коллекции.
Основная идея состоит в том, чтобы один тип зависел от другого. Это возможно в простой старой Java 6?