我正在等待2.12能够使用onCreate钩子,但它似乎被推迟到2.13。是否有任何建议可以做出合适的选择?从本质上讲,我有一个特征和一个抽象类如下:
trait Issue {
def details: ...
def logic: ...
def toSimpleView: ...
}
abstract class AbstractIssue extends(source: IssueSource) extends Issue{
val extraDetail: ...
}
AbstractIssue
存在多种不同的实现,并且在问题的初始化中我想抓住它并将其简化表示到数据库中,然后像往常一样将其返回到代码中。目标是仅在初始化子类中的所有字段之后将其放入数据库中,并且还必须在AbstractIssue
和Issue
中编写此代码以避免搜索每个现有的孩子Issue
。
我对这个问题的直觉反应是将它添加到抽象构造函数中:
abstract class AbstractIssue extends(source: IssueSource) extends Issue{
val extraDetail: ...
Future { Thread.sleep(2000) }.foreach(_ => InsertIssue(this.toSimpleView)) }
}
不幸的是,这是一种可怕的方式,我正在努力想出一个干净的解决方案。有没有人有任何想法?
答案 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())
}