Mic*_*lak 2 generics scala traits
为什么这不起作用?
trait testtrait[T] {
var ob:T = null
}
Run Code Online (Sandbox Code Playgroud)
然后scalac testtrait.scala产生
testtrait.scala:2: error: type mismatch;
found : Null(null)
required: T
var ob:T = null
^
one error found
Run Code Online (Sandbox Code Playgroud)
我正在使用Scala 2.9
我不能确切地说为什么,但是下划线的概念(这是类型的默认值的快捷方式,对象为null)将正常工作:
trait testtrait[T] {
var ob:T = _
}
Run Code Online (Sandbox Code Playgroud)
更多可怕的解决方法已被asInstanceOf投射,但我找到了更好的替代方案.
trait testtrait[T] {
var ob:T = null.asInstanceOf[T]
}
Run Code Online (Sandbox Code Playgroud)
null是一个类型的值Null,但不是任何类型具有Null子类型,只有AnyRef派生的类型(Nothing当然除外).假设你做了类似的事情
object SomeObj extends testtrait[Int]
Run Code Online (Sandbox Code Playgroud)
什么SomeObj.ob应该等于?它是一个Int,所以没有null可能的价值.
正如在其他答案中所说,您应该使用下划线语法来设置类型的默认值.