2017-08-26 5 views
5

मैं this (वास्तव में आप, इस सवाल को समझने के लिए लिंक को पढ़ने के लिए की जरूरत नहीं है यह सिर्फ संदर्भ के लिए है) करने के लिए कुछ इसी तरह बनाने की कोशिश कर रहा था, और मैं इस बारे में:क्यों परमाणु इंटेटर कोटलिन में सार है? (यह जावा में ठीक काम करता है)

class CallArbiter: AtomicInteger { // error 
    constructor(initialValue: Int) : super(initialValue) 
    constructor() : super() 
} 

संकलक का कहना है:

Error:(8, 1) Kotlin: Class 'CallArbiter' must be declared abstract or implement abstract base class member public abstract fun toByte(): Byte defined in java.util.concurrent.atomic.AtomicInteger

मैं समझ नहीं क्यों यह मुझे आवश्यकता है उन तरीकों को लागू करने। मैंने उन्हें AtomicInteger कक्षा में नहीं देखा। जावा में सब कुछ ठीक है।

+1

यह कोटलिन के लिए एक मैप प्रकार है। –

+0

हां, क्योंकि 'kotlin.Number' को' java.lang.Number' – ice1000

+0

पर मैप किया गया है, ऐसा लगता है कि आपने इस बग का सामना किया है: https://youtrack.jetbrains.com/issue/KT-16087 – Ilya

उत्तर

4

AtomicIntegerjava.lang.Number बढ़ाता है, लेकिन कोटलिन में इस प्रकार mapped से kotlin.Number है।

kotlin.Number में इन सार तरीकों परिभाषित कर रहे हैं (आप अपने API में देख सकते हैं जो):

toByte, toInt, toChar आदि

आप कोड की इस पंक्ति डिबग हैं: AtomicInteger(2).toByte() आप देख सकते हैं, कि विधि java.lang.Number::byteValue का उपयोग किया जाता है, यह कुछ संकलक तकनीकों का उपयोग करके किया जाता है।

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