実際の派生型と一致する必要があるジェネリック型変数を宣言するための一般的な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は上記の例の直訳よりも優れたものを持っているのではないかと想像しました。
これを達成するためのよりエレガントな方法はありますか?