kotlin - 为什么 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
.
解决方案
反射是一种语言在运行时检查和动态调用类、方法、属性等的能力。
反射不能在编译时使用,它们只在运行时可用,所以你不能使用::class
or ::class.java
,它们在编译时不可用。
修饰符将const
val 标记为编译时常量。因此不能在编译时调用任何运行时函数。
推荐阅读
- python - Python - if 语句中的变量范围 - 为什么以下代码有效?
- php - 从 $data['id']; 赋值
- google-cloud-platform - 我们可以安排 StackDriver Logging 来导出日志吗?
- javascript - 如何将两个或多个包含多个对象的数组合并为一个并增加它们的 ID?
- python - csv排序和删除python
- python - python:循环遍历Excel中的索引并用字符串替换
- angular - Angular 7 - 从 Angular 组件生成 URL
- c# - C# 按时间更改表行类
- rest - OAuth2 用于 REST API,紧耦合 SPA 作为唯一客户端
- python - 在 Jupyter 中写入目录权限