"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

  1. Их смысл совсем другой, даже если синтаксис в основном случае var x =... заканчивается тем же:

    1. var в Kotlin означает "это изменяемая переменная" и может использоваться как при определении типа, так и при явном: var x: String =...;

    2. var в Java означает "это переменная с выведенным типом" и может использоваться как для изменяемых, так и для final переменных.

  2. 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)