Scala OnCreate替代实现

时间:2016-07-26 20:45:50

标签: scala logging

我正在等待2.12能够使用onCreate钩子,但它似乎被推迟到2.13。是否有任何建议可以做出合适的选择?从本质上讲,我有一个特征和一个抽象类如下:

trait Issue {
    def details: ...
    def logic: ...
    def toSimpleView: ...
}

abstract class AbstractIssue extends(source: IssueSource) extends Issue{
    val extraDetail: ...
}

AbstractIssue存在多种不同的实现,并且在问题的初始化中我想抓住它并将其简化表示到数据库中,然后像往常一样将其返回到代码中。目标是仅在初始化子类中的所有字段之后将其放入数据库中,并且还必须在AbstractIssueIssue中编写此代码以避免搜索每个现有的孩子Issue

我对这个问题的直觉反应是将它添加到抽象构造函数中:

abstract class AbstractIssue extends(source: IssueSource) extends Issue{
    val extraDetail: ...
    Future { Thread.sleep(2000) }.foreach(_ => InsertIssue(this.toSimpleView)) }
}

不幸的是,这是一种可怕的方式,我正在努力想出一个干净的解决方案。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

直到onCreate出来之前我最终做了什么?

def hackToHandleAfterInitialization(handler:IssueHandler):Future[Unit] = {
import scala.concurrent.blocking
Future {
  var continue = true
  while (continue) {
    try {
      blocking(synchronized(handler.handleProblem(this)))
      continue = false
    } catch {
      case un:UninitializedFieldError =>
        Thread.sleep(5)
        continue = true
    }
  }
  Unit
}

然后在抽象类中:

abstract class AbstractIssue extends(source: IssueSource) extends Issue{
    val extraDetail: ...
    hackTohandleAfterInitialization(DefaultHandler())
}