Java 中的 'ClassName.class' 与 Kotlin 中的 '[ClassName::class]' 相同吗?
is 'ClassName.class' in Java same as '[ClassName::class]' in Kotlin?
在 Android 开发页面的 Dagger 部分,
NetworkModule.class
in Java代码在Kotlin代码中写成[NetworkModule::class]
。
我认为 Java 中的 NetworkModule.class
应该是 Kotlin 中的 NetworkModule::class.java
,不是吗?
为什么要用方括号([]
)?我认为它与 get
相同,但为什么我们需要它?
我正在读这个:https://developer.android.com/training/dependency-injection/dagger-android#java
在'Dagger Modules'部分,
Java代码:
@Component(modules = NetworkModule.class)
public interface ApplicationComponent {
...
}
用 Kotlin 编写的相同代码:
@Component(modules = [NetworkModule::class])
interface ApplicationComponent {
...
}
这是 Kotlin 1.2 中添加的仅在注释中支持的 array literal syntax。您可以使用它将事物数组传递给注释。所以 [NetworkModule::class]
实际上是一个包含单个元素的数组,即 NetworkModule::class
.
翻译成 Java 的 Kotlin 代码将是:
@Component(modules = { NetworkModule.class })
interface ApplicationComponent {
...
}
只是当数组中只有一个元素时,Java中的{}
括号可以省略。但是,您不能只在 Kotlin 中编写 NetworkModule::class
。你必须明确地说它是一个数组,使用[]
或arrayOf
等方式,除非它是value
参数,在这种情况下它被翻译为vararg
。
一般而言,Java 中的 NetworkModule.class
在注释中应翻译为 NetworkModule::class
。但请注意,这是 KClass
类型。如果您想要 java.lang.Class
,请添加 .java
.
在 Android 开发页面的 Dagger 部分,
NetworkModule.class
in Java代码在Kotlin代码中写成[NetworkModule::class]
。
我认为 Java 中的
NetworkModule.class
应该是 Kotlin 中的NetworkModule::class.java
,不是吗?为什么要用方括号(
[]
)?我认为它与get
相同,但为什么我们需要它?
我正在读这个:https://developer.android.com/training/dependency-injection/dagger-android#java
在'Dagger Modules'部分,
Java代码:
@Component(modules = NetworkModule.class)
public interface ApplicationComponent {
...
}
用 Kotlin 编写的相同代码:
@Component(modules = [NetworkModule::class])
interface ApplicationComponent {
...
}
这是 Kotlin 1.2 中添加的仅在注释中支持的 array literal syntax。您可以使用它将事物数组传递给注释。所以 [NetworkModule::class]
实际上是一个包含单个元素的数组,即 NetworkModule::class
.
翻译成 Java 的 Kotlin 代码将是:
@Component(modules = { NetworkModule.class })
interface ApplicationComponent {
...
}
只是当数组中只有一个元素时,Java中的{}
括号可以省略。但是,您不能只在 Kotlin 中编写 NetworkModule::class
。你必须明确地说它是一个数组,使用[]
或arrayOf
等方式,除非它是value
参数,在这种情况下它被翻译为vararg
。
一般而言,Java 中的 NetworkModule.class
在注释中应翻译为 NetworkModule::class
。但请注意,这是 KClass
类型。如果您想要 java.lang.Class
,请添加 .java
.