0
我等待2.12能夠使用onCreate鉤子,但它似乎已被推遲到2.13。有沒有什麼建議可以讓你成爲一個體面的替代品?從本質上說,我有一個特質和抽象類,如下所示:Scala OnCreate替代實現
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)) }
}
不幸的是,這是做一個可怕的方式,而我努力拿出一個乾淨的解決方案。有沒有人有任何想法?
也許DelayedInit,它可以讓你做什麼你初始化喜歡。也許你需要知道什麼時候你的對象已經足夠準備好了。 –
不幸的是DelayedInit已被棄用AFAIK。但是,是的,如果我可以找到一種方式來表示所有必填字段準備就緒時,我可以創建一個Future,然後等待至此 – Ophirr
您可以使'toSimpleView'返回類似'Future'的類型,例如'def toSimpleView:Task [ ???]或'def toSimpleView:Future [???]'。該方法(或者具體類中的其他方法)可以在完成初始化時完成承諾。雖然它看起來像一個非常糟糕的設計!請考慮移動AbstractIssue外部的'InsertIssue',讓負責創建問題的人決定是否要將它們放入數據庫。 – valenterry