2017-08-26 71 views
5

我試圖讓類似於this(其實你並不需要閱讀的鏈接來了解這個問題,它只是供參考)東西,我寫這篇文章:爲什麼AtomicInteger在Kotlin中是抽象的? (它在Java中正常工作)

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班。 Java中的一切都很好。

+1

它是Kotlin的映射類型。 –

+0

是的,因爲'kotlin.Number'被映射到'java.lang.Number' – ice1000

+0

似乎你已經遇到了這個bug:https://youtrack.jetbrains.com/issue/KT-16087 – Ilya

回答

4

AtomicInteger延伸java.lang.Number,但在Kotlin這種類型是mappedkotlin.Number

kotlin.Number這些抽象的方法定義(您可以在其API見):

toBytetoInttoChar

如果調試這行代碼:AtomicInteger(2).toByte()你所看到的,使用方法java.lang.Number::byteValue,這是通過使用某些編譯器技術來完成的。

相關問題