我知道之前已经问过这个问题,但是答案不适用于这种情况,或者我不理解它们.
基本上,为什么以下(重新创建我的问题的简单示例)不起作用?
class Test[+T] {
var list: List[T] = _
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我有一个对象,我想传递一个Test [Nothing]的实例(空的测试),除非我在T中使用Test co-variant,否则这不起作用.
ste*_*tew 26
使得在测试协变T
装置,其Test[A]
是的子类型Test[Any]
为任何A
.所以让我们创建一个Test
:
val test_string = new Test[String]
Run Code Online (Sandbox Code Playgroud)
现在我们有一个Test[String]
和包含list
的类型List[String]
.
由于Test[String]
是子类型Test[Any]
,因此应允许以下内容:
val test_any : Test[Any] = test_string
Run Code Online (Sandbox Code Playgroud)
现在,我们有一个Test[Any]
,因此test_any.list
是类型List[Any]
,这意味着以下应该是有效的:
test_any.list = List[Any]()
Run Code Online (Sandbox Code Playgroud)
这意味着我们只是List[Any]
为test_strings列表成员分配了一个,不应该被允许,因为它应该是a List[String]
,而不是a List[Any]
.这也意味着你可以在列表中添加任何内容,因为它是类型List[Any]
.
归档时间: |
|
查看次数: |
5367 次 |
最近记录: |