2016-07-07 3 views
12

कोटलिन में एक संपत्ति कैसे बनाएं, जिसमें निजी गेटटर है (या सिर्फ यह नहीं है) लेकिन सार्वजनिक सेटटर है?कोटलिन संपत्ति के लिए निजी गेटर और सार्वजनिक सेटटर

var status 
private get 

एक त्रुटि के साथ काम नहीं करता है: Getter visibility must be the same as property visibility

मेरे मामले में, कारण जावा इंटरॉप के लिए है: मैं अपने जावा कोड setStatus नहीं लेकिन getStatus कॉल करने के लिए सक्षम होना चाहते हैं।

class Test { 
    private var name: String = "name" 

    fun setName(name: String) { 
     this.name = name 
    } 
} 

क्या आप internal दृश्यता का उपयोग कर सकते गेटर तक पहुँचने से बाहरी पुस्तकालयों को प्रतिबंधित करना चाहते हैं:

+0

बस उत्सुक: आप ऐसा क्यों करना चाहते हैं? केवल एक लेखन क्षेत्र? – Fildor

+0

निजी माध्यम से सीधे कक्षा में संपत्ति का उपयोग करने का मतलब है, है ना? –

+0

हां। केवल एक लेखन क्षेत्र। यह केवल कक्षा के अंदर से पढ़ा जाता है। – yuku

उत्तर

9

यह असंभव पर Kotlin में पल एक सेटर है कि संपत्ति की तुलना में अधिक दिखाई दे रहा है के साथ एक संपत्ति के लिए है। इस पर इश्यू ट्रैकर में एक भाषा डिज़ाइन समस्या है, इसके लिए देखने/वोट करने के लिए स्वतंत्र महसूस करें या अपने उपयोग के मामलों को साझा करें: https://youtrack.jetbrains.com/issue/KT-3110

11

वर्तमान Kotlin संस्करण में (1.0.3) ही एकमात्र विकल्प तो जैसे सेटर विधि अलग है संशोधक आप अभी भी पुस्तकालय के भीतर संपत्ति सिंटैक्स का उपयोग करने की अनुमति:

class Test { 
    internal var name: String = "name" 
    fun setName(name: String) { this.name = name } 
} 

fun usage(){ 
    val t = Test() 
    t.name = "New" 
} 
+1

यदि आप जावा का कोड उपयोग करने की योजना बनाते हैं तो ऐड-ऑन के रूप में, अंततः आंतरिक कीवर्ड जावा दुनिया में सार्वजनिक हो जाता है –

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

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