タイプパラメータTには特定のスーパータイプS_1が必要であると言えます。
class Test[T <: S_1]
タイプパラメータには、複数のスーパータイプの選択肢のうち少なくとも1つのスーパータイプが必要であると言う方法はありますか?(擬似コード)のようなもの:
class Test[T <: S_1 || S_2]
または:このような構造は意味がなく、コードの設計ミスのヒントになるため、これは不可能ですか?
タイプパラメータTには特定のスーパータイプS_1が必要であると言えます。
class Test[T <: S_1]
タイプパラメータには、複数のスーパータイプの選択肢のうち少なくとも1つのスーパータイプが必要であると言う方法はありますか?(擬似コード)のようなもの:
class Test[T <: S_1 || S_2]
または:このような構造は意味がなく、コードの設計ミスのヒントになるため、これは不可能ですか?
簡単な答え:直感的な解決策は、型パラメーターに必要な一連の能力を表す共通の特性を作成S_1
して共有することです。その特性をの上限として使用します。S_2
T
T
その他の可能性:
Niklasの2番目の選択肢について詳しく説明します。暗黙のパラメータを使用して型について何かを証明できるので、これはまさにそのように思えます。これは次のようになります。
class ThingIWantToProve[T]
object ThingIWantToProve {
// Here I define the proofs I need
implicit def s1IsProvable: ThingIWantToProve[S_1] = new ThingIWantToProve[S_1]
implicit def s2IsProvable: ThingIWantToProve[S_2] = new ThingIWantToProve[S_2]
}
class Test[T : ThingIWantToProve] // here I use a context bound