私はこの質問が以前に尋ねられたことを知っていますが、答えがこの場合に当てはまらないか、私はそれらを理解していません。
基本的に、次の(私の問題を再現する簡単な例)が機能しないのはなぜですか?
class Test[+T] {
var list: List[T] = _
}
私が抱えている問題は、Test[Nothing](空の)のインスタンスを渡したいオブジェクトがあることです。これは、で共変Testを行わない限り機能しません。TestT
私はこの質問が以前に尋ねられたことを知っていますが、答えがこの場合に当てはまらないか、私はそれらを理解していません。
基本的に、次の(私の問題を再現する簡単な例)が機能しないのはなぜですか?
class Test[+T] {
var list: List[T] = _
}
私が抱えている問題は、Test[Nothing](空の)のインスタンスを渡したいオブジェクトがあることです。これは、で共変Testを行わない限り機能しません。TestT
でテストを共変にすることは、 for anyのサブタイプであるTことを意味します。それでは、次を作成しましょう。Test[A]Test[Any]ATest
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]。