Преобразование Java в Kotlin Array, почему отличается в другом сценарии? - PullRequest
2 голосов
/ 21 марта 2019

Сценарий 1 Когда я Кинжал Модули Аннотация, как показано ниже от Java до Kotlin

@Module(includes = {AModule.class, XModule.class})

Меняется на

@Module(includes = [AModule::class, XModule::class])

Сценарий 2 Однако, когда я преобразую приведенный ниже

Class<?>[] classArray = {AModule.class, XModule.class};

Он изменится на

val classArray = arrayOf(AModule::class.java, XModule::class.java)

Вопрос Почему преобразование {AModule.class, XModule.class} отличается в вышеуказанных 2 сценариях,где один использует [], а другой использует arrayOf вместо?

1 Ответ

3 голосов
/ 21 марта 2019

Начиная с Kotlin 1.2, вы можете использовать литералы массива в аннотациях. Они не являются частью реального синтаксиса Kotlin и зарезервированы только для аннотаций. Это может измениться в будущем, но в настоящее время вы не можете использовать литералы массива в вашем реальном коде.

Читайте об аннотациях здесь .

Для других аргументов, которые имеют тип массива, вам нужно использовать массив буквальный синтаксис (начиная с Kotlin 1.2) или arrayOf (...):

// Java

public @interface AnnWithArrayMethod {

    String[] names();

}

// Kotlin 1.2 +:

@AnnWithArrayMethod(names = ["abc", "foo", "bar"]) 
class C

// Старые версии Kotlin:

@AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) 
class D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...