Java中的“ClassName.class”与Kotlin中的“[ClassName::class]”相同吗?
在 Android 开发页面的 Dagger 部分,
NetworkModule.classJava 代码的编写方式[NetworkModule::class]与 Kotlin 代码相同。
-
我认为
NetworkModule.class在 Java 中应该NetworkModule::class.java在 Kotlin 中,不是吗? -
为什么要使用方括号(
[])?我认为它与 相同get,但我们为什么需要它?
我在读这个:https : //developer.android.com/training/dependency-injection/dagger-android#java
在“匕首模块”部分,
爪哇代码:
@Component(modules = NetworkModule.class)
public interface ApplicationComponent {
...
}
用 Kotlin 编写的相同代码:
@Component(modules = [NetworkModule::class])
interface ApplicationComponent {
...
}
回答
这是Kotlin 1.2 中添加的仅在注释中支持的数组文字语法。您可以使用它来将事物数组传递给注释。所以[NetworkModule::class]实际上是一个包含单个元素的数组,即NetworkModule::class.
翻译成 Java 的 Kotlin 代码将是:
@Component(modules = { NetworkModule.class })
interface ApplicationComponent {
...
}
只是{}当数组中有单个元素时,Java 中可以省略括号。但是,您不能只用NetworkModule::classKotlin编写。您必须使用[], or等方式明确说明它是一个数组,arrayOf除非它是value参数,在这种情况下它被翻译为vararg。
一般来说,NetworkModule.class在Java中应该翻译成NetworkModule::classwhen in an annotation。但请注意,这是类型KClass。如果你想要一个java.lang.Class,添加.java.
- @Tenfour04 You mean [this](https://kotlinlang.org/docs/reference/annotations.html#constructors)? "If you need to specify a class as an argument of an annotation, use a Kotlin class (KClass). The Kotlin compiler will automatically convert it to a Java class"
THE END
二维码