"var" в java 10 и kotlin
Я знаю, что мы можем использовать ключевое слово "var" для определения переменных в Kotlin:
var foo = 3
В последнем обновлении java (java 10) также вводится тип "var":
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
Мой вопрос в том, какова разница между использованием "var" между этими языками?
Ответы
Ответ 1
-
Их смысл совсем другой, даже если синтаксис в основном случае var x =...
заканчивается тем же:
-
var
в Kotlin означает "это изменяемая переменная" и может использоваться как при определении типа, так и при явном: var x: String =...
;
-
var
в Java означает "это переменная с выведенным типом" и может использоваться как для изменяемых, так и для final
переменных.
-
var
в Java может использоваться только для локальных переменных; var
в Kotlin также используется для свойств.
Ответ 2
Согласно примечаниям к выпуску Java 10, в нем говорится:
Мы стремимся улучшить опыт разработчика, уменьшив церемонию, связанную с написанием кода Java, при сохранении приверженности Java безопасности статического типа, позволяя разработчикам преодолевать часто ненужное объявление манифеста локальных переменных. Эта функция позволила бы, например, такие объявления, как:
var list = new ArrayList<String>();//infers ArrayList<String>
var stream = list.stream();//infers Stream<String>
Так что, в основном, это приспособить ленивость программистов; вместо записи List<String> list = new ArrayList<>();
, теперь вы можете опустить List<String>
и заменить его на var
, тем самым позволяя Java вывести list
типов - он может это сделать, потому что переменная инициализируется, когда она определена. Обратите внимание: вам нужно будет list
тип list
при инициализации (в приведенном выше случае вы должны добавить String
в new ArrayList<String>();
). Таким образом, Java по-прежнему сохраняет декларацию статического типа.
В чем разница с Котлином?
Тип переменной в Kotlin, определенный с помощью var
, также выводится (но также может быть явным в случае var foo: Int
), а Kotlin также является статически типизированным языком.
Ответ 3
-
var
в Java 10 может упростить некоторое объявление типа ArrayList<String>
и тип потока.
-
var
можно использовать только в методе Java 10. Но вы можете написать его в любом месте в Котлине
-
И нет ключевого слова val
в Java 10, тогда мы могли бы использовать final var
как val
в Java 10.
(Я думаю, что мы все знаем изменчивые и неизменные по умолчанию, поэтому я не буду их описывать).
var
рассматривается как type
(JB Lexer) и keyword
(JB Grammar Psi) в Intellij IDEA 2018. 1+.
Я разработал плагин для подсказок типа Java 10 var type, чтобы показать его тип (просто выглядит как Kotlin)