为什么“is”操作符在kotlinjs中不荣誉继承

w8f9ii69  于 2023-01-17  发布在  Kotlin
关注(0)|答案(1)|浏览(114)

我在开发一个“Kotlin的React”项目。

plugins {
    kotlin("js") version "1.8.0"
}

我写了这门课

class Percentage(private val number: Number) : Number() {
    override fun toByte() = number.toByte()
    override fun toChar() = number.toChar()
    override fun toDouble() = number.toDouble()
    override fun toFloat() = number.toFloat()
    override fun toInt() = number.toInt()
    override fun toLong() = number.toLong()
    override fun toShort() = number.toShort()
    override fun toString() = "$number%"
}

is运算符似乎不荣誉继承:

if (value is Percentage) {
    println(value is Number)
}

甚至IDEA也警告我“例如检查总是真的”,但控制台打印错误...

6psbrbz9

6psbrbz91#

因此,我检查生成的JS代码,并看到以下内容:

function isNumber(a_28) {
    var tmp_349;
    if (typeof a_28 === 'number') {
      tmp_349 = true;
    } else {
      tmp_349 = a_28 instanceof Long;
    }
    return tmp_349;
  }

  function main() {
    var value_70 = new Percentage(42);
    if (value_70 instanceof Percentage) {
      println(isNumber(value_70));
    }
  }

这就解释了一切。由于Kotlin/JS语言的差异,is运算符的行为在像Number这样的基元类型周围是不一致的。

相关问题