2017-05-25 148 views
5

我有一個課,我要麼知道創造的具體價值,要麼我需要生成它,這有點貴。只有在實際需要時纔可以生成該值?我可以根據構造函數初始化一個值嗎?

val expensiveProperty: A 
constructor(expensiveProperty: A) { 
    this.expensiveProperty = expensiveProperty 
} 
constructor(value: B) { 
    // this doesn't work 
    this.expensiveProperty = lazy { calculateExpensiveProperty(value) } 
} 
+0

[this](https://stackoverflow.com/a/36233649/6521116)可能有幫助 –

回答

5

這是可能的,但有一個轉折:

class C private constructor(lazy: Lazy<A>) { 
    val expensiveProperty by lazy 

    constructor(value: B) : this(lazy { calculateExpensiveProperty(value) }) 
    constructor(expensiveProperty: A) : this(lazyOf(expensiveProperty)) 
} 

注意我是如何保持主構造的隱私,讓二級構造公衆。

+0

這是很好的解決方案,我在回答時沒有注意構造函數的價值。 – chandil03

+0

謝謝,這工作! – Chris