使用setter函数实现注入

puu*_*eli 1 java dependency-injection scala

我正在尝试将Scala用作现有Java应用程序的一部分,现在我遇到了一个使用setter方法注入的依赖项的问题(在这部分代码中没有DI框架).如何以Scala方式处理?

在Scala中val,var需要在声明时进行初始化,但我不能这样做,因为Java setter会注入实现某个接口的对象,并且接口是抽象的,无法实例化.

class ScalaLogic {
  var service  // How to initialize?

  def setService (srv: OutputService) = {
  service = srv
}
Run Code Online (Sandbox Code Playgroud)

有没有办法初始化,var service以便我以后可以为其分配依赖?它应该是词法范围,以便在整个班级中可见.

Mit*_*ins 5

您可以使用下划线初始化为默认值(null).

class ScalaLogic {
  var service: OutputService = _

  def setService (srv: OutputService) = {
    service = srv
  }
}
Run Code Online (Sandbox Code Playgroud)

关于下划线(与使用null相反)的好处是它适用于基元和对象,因此参数化类的工作方式如下:

class ScalaLogic[T] {
  var service: T = _

  def setService (srv: T) = {
    service = srv
  }
}
Run Code Online (Sandbox Code Playgroud)