2017-08-08 12 views
6

मैं प्रारूप की एक जावा वर्ग है:कोटलिन: कोटलिन में डेटा क्लास के माध्यम से जावा क्लास में एक निजी बूलियन सेट करना। मैं ऐसा क्यों नहीं कर पा रहा हूं?

class JavaClass { 
    private String name; 
    private Boolean x; 

    public String getName() { return name; } 
    public void setName(String name) { this.name = name } 

    public Boolean isX() { return x; } 
    public void setX(Boolean x) { this.x = x } 
} 

और मैं Kotlin में एक डाटा वर्ग, स्वरूप की है जिसमें इस वर्ग के अधिभावी कर रहा हूँ:

data class KotlinClass(
    var nameNew: String? = null, 
    var xNew: Boolean = false 
): JavaClass() { 

    init { 
     name = nameNew 
     x = xNew 
    } 
} 

जब मैं इस, कर नाम प्रारंभिकरण इस तरह से कोई समस्या नहीं देता है, लेकिन मैं इस तरह x को प्रारंभ नहीं कर सकता। आईडीई शिकायत करता है कि एक्स अदृश्य है। एक्स के साथ क्यों और नाम के साथ नहीं?

मैंने कोटलिन कक्षा में एक कस्टम वैटर और सेटर के साथ नाम x के साथ एक नया चर बनाया और यह सेटटर के लिए एक आकस्मिक ओवरराइड के बारे में शिकायत करता है (यह समझ में आता है।)। इसका मतलब है कि जावा सेटर और गेटर डेटा क्लास में दिखाई दे रहा है। तो इनटर ब्लॉक में एक्स के लिए सेटटर का उपयोग क्यों नहीं किया जा रहा है, जैसे यह नाम के लिए कर रहा है?

उत्तर

6

यह how Kotlin represents Java getters and setters as properties की वजह से है। अगर गेटर हस्ताक्षर T isSomething() (और T getSomething() नहीं है), तो कोटलिन संपत्ति का नाम isSomething भी है (न केवल something)। और आपके मामले में, x = xNew निजी क्षेत्र के उपयोग के लिए हल करता है। या, यदि आप अपने जावा कोड में getX() करने के लिए isX() नाम बदलने, तो अपने x = xNew काम काम करेंगे

init { 
    name = nameNew 
    isX = xNew 
} 

:

आप अपने कोड के बजाय isX बताए द्वारा ठीक कर सकते हैं।

+1

धन्यवाद! इस पर एक अनुवर्ती प्रश्न: 'वर ISX: बूलियन प्राप्त() = ISX() सेट (मूल्य) = setX (मान)' आपने कहा था कि ISX एक उत्पन्न संपत्ति हो जाएगा। तो क्या इसके हस्ताक्षर इस तरह कुछ दिखेंगे? – NSaran

+1

@ user8138184, यह केवल एक प्रतिनिधित्व है। यह व्यवहार करता है * जैसा कि * आपके द्वारा लगाए गए एक संपत्ति को लागू किया गया है, लेकिन यह वास्तविक संपत्ति के लिए संकलित नहीं है (कोटलिन कंपाइलर केवल वास्तविक गेटटर और सेटर कॉल पर इस प्रतिनिधित्व के पढ़ने और लिखने के नक्शे को मानचित्र करता है)। – hotkey

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