android—java中的“classname.class”与kotlin中的“[classname::class]”相同吗?

nwnhqdif  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(409)

在android开发页面的匕首部分, NetworkModule.class 在java中,代码编写为 [NetworkModule::class] Kotlin密码。
我想 NetworkModule.class 在java中应该是 NetworkModule::class.java 在Kotlin,不是吗?
为什么要用方括号( [] )? 我认为这和 get ,但我们为什么需要它?
我在读这个:https://developer.android.com/training/dependency-injection/dagger-android#java
在“匕首模块”部分,
java代码:

@Component(modules = NetworkModule.class)
public interface ApplicationComponent {
    ...
}

用kotlin编写的相同代码:

@Component(modules = [NetworkModule::class])
interface ApplicationComponent {
    ...
}
vsaztqbk

vsaztqbk1#

这是kotlin1.2中添加的仅在注解中支持的数组文本语法。您可以使用它将事物的数组传递给注解。所以呢 [NetworkModule::class] 实际上是一个包含单个元素的数组 NetworkModule::class .
翻译成java的kotlin代码是:

@Component(modules = { NetworkModule.class })
interface ApplicationComponent {
    ...
}

只是 {} 在java中,当数组中只有一个元素时,可以省略方括号。但是,你不能只写 NetworkModule::class 在Kotlin。您必须明确地说它是一个数组,使用如下方法 [] ,或 arrayOf ,除非是 value 参数,在这种情况下,它被转换为 vararg .
一般来说, NetworkModule.class 在java中应该翻译成 NetworkModule::class 在注解中时。但请注意,这是一种 KClass . 如果你想要一个 java.lang.Class ,添加 .java .

相关问题