Предположим, у меня есть следующий класс:
public class FixExpr {
Expr<FixExpr> in;
}
Теперь я хочу представить общий аргумент, абстрагируясь от использования Expr:
public class Fix<F> {
F<Fix<F>> in;
}
Но Eclipse это не нравится:
Тип F не является универсальным; его нельзя параметризовать аргументами ‹Fix ‹F››
Возможно ли это вообще, или я упустил из виду что-то, что приводит к поломке этого конкретного экземпляра?
Некоторая справочная информация: в Haskell это обычный способ написания общих функций; Я пытаюсь перенести это на Java. Аргумент типа F в приведенном выше примере имеет вид * -> * вместо обычного вида *. В Haskell это выглядит так:
newtype Fix f = In { out :: f (Fix f) }