在C#中,我们有nameof()操作符,它会返回类的名称字符串,那么在Kotlin中有什么等价物吗?
我的使用场景可能像这样:
我的使用场景可能像这样:
internal val TAG = nameof(MyCustomActivity)
正如所接受的答案中所提到的,<class>::class.simpleName
属性将提供类似于C# nameof
操作符的结果。但是,与nameof
不同,::class.*
不能在编译时求值。
这一点很重要,因为在C#中使用nameof
操作符的情况下,在::class
中无法等效地执行。
例如,AspectJ的@Around
注释。
以下代码将失败,因为您不能插入非编译时强制执行表达式†:
@Around("@annotation(${MyAnnotation::class.simpleName})")
nameof
,那么可以这样做: (指可以在上下文环境中使用)
@Around("@annotation(${nameof(MyAnnotation)})")
因此,尽管接受的答案提供了一种在Kotlin中解决符号名称的功能类似的方式,但它不能像C#中的nameof
那样具有相同的灵活性。
† 有趣的是,在撰写本答案之前,我没有意识到您可以将常量值(和其他编译时可评估)表达式插入注释参数中;以下将编译:
const val FOO = "foo"
@MyAnnotation("${FOO} ${1 + 1}")
MyCustomActivity::class.simpleName
MyCustomActivity
。MyCustomActivity::class.qualifiedName
会输出<your_package>.MyCustomActivity
internal val TAG = MyCustomActivity::class.simpleName
- Tenfour04