мне нужно иметь так вроде GADT в Java, кактипа параметризирующего в Java (GADT)
interface Action<C, O> {
Collection<O> doAction(C<O> predicate)
}
так что я могу легко объявить класс как
class Selector<T> {
...
}
, а затем использовать его с реализацией Например, действие, принимающее экземпляр Селектора. И иметь реализацию Action, принимающего Predicate, а также - но тип аргумента должен соответствовать возвращаемому типу коллекции.
Основная идея состоит в том, чтобы один тип зависел от другого. Возможно ли это в простой старой Java 6?
я не уверен, что я следую. Вы можете определить 'Action' как' Action> ', я думаю (хотя вы могли бы также использовать' C' для типа 'предикат'). Java, как и большинство языков, не поддерживает более высокие типы заказов. –
@ TomHawtin-tackline Действие> Недопустимое определение. –
jdevelop
Вы можете не только потому, что C является общим, вы не можете гарантировать, что C является общим типом O. Вы можете указать, что C продолжается от определенного класса или реализует определенный интерфейс, который может содержать O. Можете ли вы предоставить дополнительную информацию о C, O ? – Cromat