2017-05-25 5 views
5

मेरे पास एक कक्षा है जहां मुझे या तो निर्माण पर एक विशिष्ट मूल्य पता है, या मुझे इसे उत्पन्न करने की आवश्यकता है, जो कुछ हद तक महंगा है। क्या मैं केवल मूल्य उत्पन्न कर सकता हूं जब इसकी वास्तव में आवश्यकता होती है?क्या मैं कन्स्ट्रक्टर के आधार पर मूल्य को आलसी कर सकता हूं?

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

[यह] (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

संबंधित मुद्दे

 संबंधित मुद्दे