在Scala中初始化通用变量

Itt*_*ayD 10 variables scala initialization

如何在Scala中声明泛型变量而不初始化它(或初始化为任何值)?

def foo[T] {
   var t: T = ???? // tried _, null
   t
}
Run Code Online (Sandbox Code Playgroud)

Mit*_*ins 15

def foo[T] {
   var t: T = null.asInstanceOf[T]
   t
}
Run Code Online (Sandbox Code Playgroud)

而且,如果你不喜欢参与其中的仪式,你可以这样放松:

  // Import this into your scope
  case class Init()
  implicit def initToT[T](i: Init): T = {
    null.asInstanceOf[T]
  }

  // Then use it
  def foo[T] {
    var t: T = Init()
    t
  }
Run Code Online (Sandbox Code Playgroud)


Dan*_*ral 8

您不能初始化局部变量,但您可以对字段执行此操作:

scala> class foo[T] {
     | var t: T = _
     | }
defined class foo
Run Code Online (Sandbox Code Playgroud)

  • 你知道为什么它允许类变量但不允许方法变量吗? (2认同)