首页 > 解决方案 > 为什么 MyClass::class.java.simpleName 不能是常量值?

问题描述

一个正常val的就OK了,并且被初始化了。

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

解决方案


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

反射不能在编译时使用,它们只在运行时可用,所以你不能使用::classor ::class.java,它们在编译时不可用。

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


推荐阅读