有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java与使用setter函数实现的注入绑定

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

在Scala中valvar在声明时都需要初始化,但我不能这样做,因为Java setter注入实现特定接口的对象,接口是抽象的,不能实例化

class ScalaLogic {
  var service  // How to initialize?

  def setService (srv: OutputService) = {
  service = srv
}

有没有一种方法可以初始化var service,以便我以后可以将依赖项分配给它?它应该在词汇范围内,以便在整个班级中可见


共 (2) 个答案

  1. # 1 楼答案

    尝试使用类^{}。这在道德上等同于在Java中使用null。这样声明服务:

    var service: Option[MyInterface] = None
    

    使用

    service.get()
    

    还是模式匹配

    service match {
        case None => ...
        case Some[MyInterface] => ...
    }
    
  2. # 2 楼答案

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

    class ScalaLogic {
      var service: OutputService = _
    
      def setService (srv: OutputService) = {
        service = srv
      }
    }
    

    下划线的优点(而不仅仅是使用null)是它同时适用于原语和对象,因此参数化类的工作方式如下:

    class ScalaLogic[T] {
      var service: T = _
    
      def setService (srv: T) = {
        service = srv
      }
    }