2017-05-21 61 views
2

我想聲明我的android sqlite遷移object聲明。每個擴展接口Migration,並且我想讓每個人在初始化時使用Migrator對象進行註冊,該對象作爲對象也是單身。不幸的是(我很晚才意識到)kotlin對象是懶惰地初始化的,所以我的遷移必須在某個地方用於註冊。急於初始化kotlin中的對象?

我可以接受使用反射或註釋,但對如果這是一個好主意或如何遵循這個方向的約定沒有影響。

+0

我不認爲這是一個很好的理念。簡單地添加一個類而不在任何地方使用它都不應該改變你的代碼的行爲。我建議您手動保存一個遷移列表,或創建一個實現遷移界面的枚舉類。然後,您可以使用Enum.values訪問所有遷移。 –

+0

@ChristianBrüggemann總的來說,我會同意,但是我不是簡單地在沒有實際使用的地方添加一個類。我明確地調用了一個初始化/註冊方法來實現這一點,而且我更願意這樣做,以便遷移不會意外地被註銷。這比寫一個完全沒有用的完美遷移更安全。 – Catalyst

回答

0

作爲一種變通方法,你可以從對象聲明切換到對象全局變量表達式:

渴望:

val A = object { 
    init { println("eager") } 
} 

懶:

object A { 
    init { println("lazy") } 
} 
+3

這不會有效:具有頂級聲明的文件會被轉換爲'FileNameKt'類,這些類是(通常在JVM中)懶惰地初始化的。 –

+0

@AlexeyAndreev這就是我看到,當我嘗試了這一點。 – Catalyst