Scalaでは、分散はジェネリック型引数の+や-などの分散演算子で定義できます。たとえば、List
タイプは標準ライブラリでは共変です。
class List[+A]
したがって、共変リストを持つ関数は次のように定義できます。
def foo[A](list : List[A])
また、分散は一般的な境界でエミュレートできます。だから私たちもこれを書くことができます
def foo[A](list : List[_:< A])
もちろん、これは意味がありませんlist
。すでに共変であるためです。しかし、共変ではない型に対しても同じトリックを行うことができます。(のようにStack
)。もちろん、共変であるスタック(集約の継承)から新しいタイプを作成することもできます。
だから私の質問:
- 分散に一般的な境界を使用する必要があるのはいつですか?そして、いつ新しい共変型を作成する必要がありますか?
- 一般的な境界は分散にのみ役立ちますか、それとももっと宣言できますか(言語の概念)。
- それらが分散にのみ役立つ場合、境界はJavaとの互換性のためだけですか?
事前にthx:)