Существует общая идиома Java (например, в Enum
), чтобы объявить типичную переменную типа, которая должна соответствовать фактическому производному типу.
class Enum<E extends Enum<E>> {
...
}
или, если необходимо, более общие аргументы:
abstract class Foo<T, Actual extends Foo<T, Actual>> {
//now we can refer to the actual type
abstract Actual copy();
}
class Concrete<T> extends Foo<T, Concrete<T>> {
Concrete<T> copy() {...}
}
Вещи могут быть очень подробными очень быстро, поэтому я представил себе, что Scala может иметь что-то приятнее, чем буквальный перевод приведенных выше примеров.
Есть ли еще более элегантные способы достижения этого?