- PVSM.RU - https://www.pvsm.ru -
Скоро год как мы открыли его исходный код Kotlin [1]. За это время проделана большая работа, в которой активно участвовали как разработчики из JetBrains, так и представители комьюнити. Нам пришло 164 pull requests [2], то есть что-то около одного патча каждые два дня.
Сегодня мы выпустили очередной milestone: Kotlin M5 [3]. Этот пост дает краткое описание изменений, вошедших в M5.
Класс, написанный на Kotlin может иметь только один конструктор. Перегружать конструкторы незачем, поскольку есть значения по умолчанию для параметров:
class Foo(val bar: Int = 0)
Однако многие Java-фреймворки, например, JAXB, требуют, чтобы у класса был конструктор по умолчанию, то есть без параметров. Теперь Kotlin генерирует такой конструктор, если все параметры могут быть опущены.
Начиная с M5, Kotlin поддерживает не только inner-классы, но и «статические» nested-классы. Поскольку объект inner-класса хранит ссылку на объект объемлющего класса, что может приводить к неожиданным последствиям (например, к утечкам памяти), Kotlin требует явно помечать inner-классы соответствующей аннотацией:
class Outer {
val foo = 1
inner class Inner {
val bar = foo + 1
}
}
Kotlin различает nullable и not-null ссылки на уровне системы типов. Поскольку в Java для ссылок нет никаких гарантий того, что они не равны null, Kotlin загружает все непримитивные типы как nullable. Например, Java-метод foo(ArrayList<String>)
из Kotlin виден как foo(ArrayList<String?>?)
, то есть как сам список может быть null, так и любой его элемент. Этот подход наиболее безопасен, однако с ним возникает такая проблема: если где-то в Kotlin у меня уже есть ArrayList, я не могу передать его методу foo(), потому что класс ArrayList ивариантен, и типы не сходятся. Эта проблема сильно мешает жить, поэтому мы пошли на компромисс: теперь Kotlin не делать аргументы генерических типов nullable, то есть foo() будет загружен как foo(ArrayList<String>?)
и передать туда список обычных строк будет можно.
Теперь из Java-кода легче «сломать» программу на Kotlin, вызвав NPE, однако компилятор Kotlin делает все возможное, чтобы такие ошибки было легко искать: в байт-код вставляются соответствующие проверки, и некорректное значение будет обнаружено как только оно попадет из Java-кода в Kotlin-код:
Exception in thread "main" java.lang.IllegalStateException:
Method specified as non-null returned null: JavaClass.foo
at _DefaultPackage.main(hello.kt:4)
Kotlin M5 можно скачать из репозитория плагинов [4], рекомендуется использовать недавно вышедшую IntelliJ IDEA 12.0.3 [5].
Кроме описанного здесь, случилось еще много чего: от поддержки цветовой схемы Darcula [6] до возможности смешивать именованные и позиционные параметры функций. Более подробно про M5 можно почитать здесь [7] (по-английски). Приятного Котлина!
Автор: abreslav
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/26360
Ссылки в тексте:
[1] Kotlin: http://kotlin.jetbrains.com
[2] 164 pull requests: https://github.com/jetbrains/kotlin/pulls?page=1&sort=created&state=closed
[3] Kotlin M5: http://blog.jetbrains.com/kotlin/2013/02/kotlin-m5-is-out/
[4] репозитория плагинов: http://plugins.jetbrains.com/plugin?pr=idea&pluginId=6954
[5] IntelliJ IDEA 12.0.3: http://www.jetbrains.com/idea/download/index.html
[6] Darcula: http://blog.jetbrains.com/kotlin/files/2013/02/Darcula.png
[7] здесь: http://blog.jetbrains.com/kotlin/2013/02/kotlin-m5-is-out
[8] Источник: http://habrahabr.ru/post/168265/
Нажмите здесь для печати.