私はこの質問が以前に尋ねられたことを知っていますが、答えがこの場合に当てはまらないか、私はそれらを理解していません。
基本的に、次の(私の問題を再現する簡単な例)が機能しないのはなぜですか?
class Test[+T] {
var list: List[T] = _
}
私が抱えている問題は、Test[Nothing]
(空の)のインスタンスを渡したいオブジェクトがあることです。これは、で共変Test
を行わない限り機能しません。Test
T
私はこの質問が以前に尋ねられたことを知っていますが、答えがこの場合に当てはまらないか、私はそれらを理解していません。
基本的に、次の(私の問題を再現する簡単な例)が機能しないのはなぜですか?
class Test[+T] {
var list: List[T] = _
}
私が抱えている問題は、Test[Nothing]
(空の)のインスタンスを渡したいオブジェクトがあることです。これは、で共変Test
を行わない限り機能しません。Test
T
でテストを共変にすることは、 for anyのサブタイプであるT
ことを意味します。それでは、次を作成しましょう。Test[A]
Test[Any]
A
Test
val test_string = new Test[String]
これで a がTest[String]
あり、含まれているのlist
は typeList[String]
です。
Test[String]
は のサブタイプであるためTest[Any]
、以下を許可する必要があります。
val test_any : Test[Any] = test_string
そして今、私たちは を持っているTest[Any]
ので、それtest_any.list
は typeList[Any]
です。これは、以下が有効であることを意味します:
test_any.list = List[Any]()
これは、test_strings リスト メンバーに を割り当てたことを意味しList[Any]
ますが、許可されるべきではありませList[String]
んList[Any]
。また、 type であるため、リストの前に何でも追加できることも意味しますList[Any]
。