20

私はこの質問が以前に尋ねられたことを知っていますが、答えがこの場合に当てはまらないか、私はそれらを理解していません。

基本的に、次の(私の問題を再現する簡単な例)が機能しないのはなぜですか?

class Test[+T] {
    var list: List[T] = _
}

私が抱えている問題は、Test[Nothing](空の)のインスタンスを渡したいオブジェクトがあることです。これは、で共変Testを行わない限り機能しません。TestT

4

1 に答える 1

27

でテストを共変にすることは、 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]

于 2013-01-29T14:23:18.057 に答える