Почему класс времени выполнения Kotlin -коллекции является Java -классом? - PullRequest
2 голосов
/ 02 мая 2020

В курсе "Kotlin для Java -Developers" JetBrains (на Coursera) сообщается, что Kotlin -код компилируется непосредственно в байт-код. И этот байт-код затем выполняется на JVM.

Но когда я делаю:

var list = listOf<String>("A", "B", "C")
println(list::class) // => Prints "class java.util.Arrays$ArrayList"

Очевидно, что под ним используется обычный Java ArrayList. Так что я запутался ...

Является ли Kotlin просто какой-то "более современной" синтаксической вещью, которая использует Java внизу?

Практически некоторые синтаксисы c Сахар, который наносится сверху, чтобы можно было писать код более приятным способом. Но под ним все тот же старый Java -товарный

1 Ответ

6 голосов
/ 02 мая 2020

Является ли Kotlin просто "более современным" синтаксисом, который использует Java внизу?

Нет. Вы Kotlin исходный код >> << компилируете в байт-коды. </p>

Но ваш код использует библиотечную функцию listof Kotlin, и реализация этой функции возвращает значение, которое является экземпляром Java класса.

Почему?

  1. Это было , вероятно, проще / быстрее реализовать это таким образом. (Основываясь на типе объекта списка, мы можем сделать вывод, что listof просто вызывает java.util.Arrays.asList(...).)
  2. У , возможно, нет преимущества в его повторной реализации; например, нет выигрыша в производительности.
  3. Есть возможно недостатки; например, это может вызвать проблемы у людей, которым требуется, чтобы их код Kotlin был совместим с Java, который использует стандартные классы Java коллекции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...