辅助构造函数中的值

时间:2015-01-29 20:06:54

标签: scala

我知道无法在辅助构造函数中创建值/变量。那么如何使用apply或其他技术来允许以下代码工作呢?

还有一点要求不要通过将值创建移到this()内来破解它,当然我意识到这是可能的。

class DistanceCalculator(context: GeoApiContext) {    

    def this() {
        val context = new GeoApiContext()
          .setApiKey("AIza...")
          .setConnectTimeout(1, TimeUnit.SECONDS)
          .setReadTimeout(1, TimeUnit.SECONDS)
          .setWriteTimeout(1, TimeUnit.SECONDS)

        this(context)
    }
}

Gabor告诉我,在调用此()之后可以得到值,但我不确定以下是正确的方法。

class DistanceCalculator(var context: GeoApiContext) {

    def this() {

        this()

        this.context = new GeoApiContext()
          .setApiKey("AIza...")
          .setConnectTimeout(1, TimeUnit.SECONDS)
          .setReadTimeout(1, TimeUnit.SECONDS)
          .setWriteTimeout(1, TimeUnit.SECONDS)

    }
}

1 个答案:

答案 0 :(得分:2)

object DistanceCalculator {
  def defaultContext = new GeoApiContext()
          .setApiKey("AIza...")
          .setConnectTimeout(1, TimeUnit.SECONDS)
          .setReadTimeout(1, TimeUnit.SECONDS)
          .setWriteTimeout(1, TimeUnit.SECONDS)
}

以下是两种方法:

class DistanceCalculator(context: GeoApiContext) {    
    def this() = this(DistanceCalculator.defaultContext)
}

或使用var作为主构造函数并稍后设置上下文:

class DistanceCalculator(var context: GeoApiContext) {
    def this() {
        this(null)
        this.context = defaultContext
    }
}