为什么AtomicInteger在Kotlin中是抽象的? (它在Java中工作正常)

时间:2017-08-26 12:27:26

标签: java kotlin retrofit

我试图制作类似于this的东西(实际上你不需要阅读链接来理解这个问题,它仅供参考),我写这个:

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

编译器说:

  

错误:(8,1)Kotlin:类'CallArbiter'必须声明为abstract或实现抽象基类成员public abstract fun toByte():java.util.concurrent.atomic.AtomicInteger中定义的字节

我无法弄清楚为什么要求我实施这些方法。我没有在AtomicInteger课程中看到它们。 Java中的一切都很好。

1 个答案:

答案 0 :(得分:5)

AtomicInteger扩展了java.lang.Number,但在Kotlin中,此类型为mappedkotlin.Number

kotlin.Number中定义了这些抽象方法(您可以在API中看到):

toBytetoInttoChar

如果您调试这行代码:AtomicInteger(2).toByte(),您可以看到使用方法java.lang.Number::byteValue,这是通过使用某些编译器技术完成的。