Kotlin 中的 C# nameof(Class) 等效项

Vis*_*arp 8 android kotlin

在 C# 中,我们有 nameof() 运算符,它以字符串形式返回类的名称,Kotlin 中的等价物是什么?

我的用例是这样的

internal val TAG = nameof(MyCustomActivity)
Run Code Online (Sandbox Code Playgroud)

Dan*_*ugg 10

正如接受的答案中提到的,该<class>::class.simpleName属性将提供与 C# 运算符类似的结果nameof。然而,与 不同的是nameof::class.*不能在编译时求值。

\n

这是相关的,因为您可以nameof在 C# 中使用运算符,但不能等效地使用::class

\n

例如AspectJ的@Around注解。

\n

以下操作将失败,因为您无法插入非编译时\xe2\x80\xa0表达式:

\n
@Around("@annotation(${MyAnnotation::class.simpleName})")\n
Run Code Online (Sandbox Code Playgroud)\n

如果 Kotlinnameof以与 C# 相同的方式支持(可以在该上下文中使用),则可以这样做:

\n
@Around("@annotation(${nameof(MyAnnotation)})")\n
Run Code Online (Sandbox Code Playgroud)\n

因此,虽然已接受的答案提供了在 Kotlin 中解析符号名称的功能上类似的方式,但它不能像在 C# 中那样灵活地使用nameof

\n
\n

\xe2\x80\xa0有趣的是,在写这个答案之前,我没有意识到你可以将常量值(和其他编译时可评估的)表达式插入注释参数中;编译以下内容:

\n
const val FOO = "foo"\n\n@MyAnnotation("${FOO} ${1 + 1}")\n
Run Code Online (Sandbox Code Playgroud)\n


Tre*_*vor 7

MyCustomActivity::class.simpleName
Run Code Online (Sandbox Code Playgroud)

会输出MyCustomActivity

MyCustomActivity::class.qualifiedName
Run Code Online (Sandbox Code Playgroud)

会输出<your_package>.MyCustomActivity