为什么 MyClass::class.java.simpleName 不能是常量值?



正常的val是正常的,并且已初始化。

class MyClass {
companion object {
private val TAG = MyClass::class.java.simpleName
}
}

const val会导致编译错误。

class MyClass {
companion object {
private const val TAG = MyClass::class.java.simpleName
}
}

错误日志

MyClass.kt:27:33: error: const 'val' initializer should be a constant value
private const val TAG = MyClass::class.java.simpleName

simpleName不能定义为const val似乎不直观。

Kotlin中,const关键字只应在值为编译时常量时使用。这里MyClass::class.java.simpleName不是编译时常量。所以我们需要使用val而不是const.val与 Java 中的final关键字相同。

有关这方面的更多信息,请查看此处

反射是一种语言在运行时检查和动态调用类、方法、属性等的能力。

反射不能在编译时使用,它们仅在运行时可用,因此您不能使用::class::class.java中的任何一个,它们在编译时不可用。

const修饰符将 val 标记为编译时常量。因此不能在编译时调用任何运行时函数。

const关键字用于定义编译时常量,但val可以具有运行时常量。 simplename 在编译时不可用,因此出现错误。

最新更新