Kotlin 为什么MyClass::class.java.simpleName可以';这不是常数吗?
正常Kotlin 为什么MyClass::class.java.simpleName可以';这不是常数吗?,kotlin,Kotlin,正常val正常,并已初始化 class-MyClass{ 伴星{ private val TAG=MyClass::class.java.simpleName } } 但是const val会导致编译错误 class-MyClass{ 伴星{ private const val TAG=MyClass::class.java.simpleName } } 错误日志 MyClass.kt:27:33: error: const 'val' initializer should be a con
val
正常,并已初始化
class-MyClass{
伴星{
private val TAG=MyClass::class.java.simpleName
}
}
但是const val
会导致编译错误
class-MyClass{
伴星{
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
const
关键字用于定义编译时常量,但val
可以具有运行时常量,这似乎是不直观的。simplename在编译时不可用,因此会出现错误。在Kotlin
中,只有当值是编译时常量时才应使用const
关键字。这里的MyClass::class.java.simpleName
不是编译时常量。因此我们需要使用val
而不是const
val
与Java中的final
关键字相同
欲了解更多信息,请查看
反射是一种语言在运行时检查和动态调用类、方法、属性等的能力
反射不能在编译时使用,它们只在运行时可用,因此不能使用::class
或::class.java
,它们在编译时不可用
const
修饰符将val标记为编译时常量。因此,不能在编译时调用任何运行时函数