Kotlinには生の型はありません。型パラメータを削除することはできません。生タイプに似
1つのオプションは、star projectionsを使用することです:
abstract class Element<S : Snapshot<*>> { /* ... */ }
abstract class Snapshot<E : Element<*>> { /* ... */ }
しかし、あなたは通常、型パラメータの一般的なメンバーと協力することはできません。
別のオプションは、このような相互の制約を導入することである。この定義では
abstract class Element<E : Element<E, S>, S : Snapshot<S, E>>() { /* ... */ }
abstract class Snapshot<S : Snapshot<S, E>, E : Element<E, S>>() { /* ... */ }
を、あなたはSomeSnapshot: Snapshot<SomeSnapshot, SomeElement>
を定義した場合ので、タイプSomeElement
は、SomeSnapshot
を認識していることを確認することができますElement<SomeElement, SomeSnapshot>
から派生するように制約されています。
その後の実装は次のようになります。
class SomeElement : Element<SomeElement, SomeSnapshot>() { /* ... */ }
class SomeSnapshot : Snapshot<SomeSnapshot, SomeElement>() { /* ... */ }