在 C# 中,我们有 nameof() 运算符,它以字符串形式返回类的名称,Kotlin 中的等价物是什么?
我的用例是这样的
internal val TAG = nameof(MyCustomActivity)
Run Code Online (Sandbox Code Playgroud)
Dan*_*ugg 10
正如接受的答案中提到的,该<class>::class.simpleName属性将提供与 C# 运算符类似的结果nameof。然而,与 不同的是nameof,::class.*不能在编译时求值。
这是相关的,因为您可以nameof在 C# 中使用运算符,但不能等效地使用::class
例如AspectJ的@Around注解。
以下操作将失败,因为您无法插入非编译时\xe2\x80\xa0表达式:
\n@Around("@annotation(${MyAnnotation::class.simpleName})")\nRun Code Online (Sandbox Code Playgroud)\n如果 Kotlinnameof以与 C# 相同的方式支持(可以在该上下文中使用),则可以这样做:
@Around("@annotation(${nameof(MyAnnotation)})")\nRun Code Online (Sandbox Code Playgroud)\n因此,虽然已接受的答案提供了在 Kotlin 中解析符号名称的功能上类似的方式,但它不能像在 C# 中那样灵活地使用nameof。
\xe2\x80\xa0有趣的是,在写这个答案之前,我没有意识到你可以将常量值(和其他编译时可评估的)表达式插入注释参数中;将编译以下内容:
\nconst val FOO = "foo"\n\n@MyAnnotation("${FOO} ${1 + 1}")\nRun Code Online (Sandbox Code Playgroud)\n
MyCustomActivity::class.simpleName
Run Code Online (Sandbox Code Playgroud)
会输出MyCustomActivity
MyCustomActivity::class.qualifiedName
Run Code Online (Sandbox Code Playgroud)
会输出<your_package>.MyCustomActivity
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |