null

Java и var

Совсем недавно вышла новая версия языка Java - Java 10. Одной из интересных возможностей, появившихся в Java 10, является вывод типа локальной переменной (type inference). Давайте посмотрим, как мы можем использовать эту возможность для упрощения кода.

Для того, чтобы использовать type inference, нужно описать переменную с использование конструкции вида:

var varName = <some init value>;

При этом программисту не нужно явно указывать тип переменной, это тип будет вычислен компилятором на основе значения, которым инициализируется наша переменная:

var test = "the type of this var will be String";

В представленном выше выражении переменной test будет присвоен тип String.

В нынешней версии Java ключевое слово var можно использовать при объявлении локальных переменных и индексов в усовершенствованном for-loop. Если var используется совместно с объявлением локальной переменной, то переменная должна быть инициализирована каким-либо значением.

Еще один пример, на этот раз с использованием циклов:

int[] arr = {1, 2, 3, 7, 8};
var sum = 0;
for (var i = 0; i < arr.length; i++) {
  sum += arr[i];
}

Пример показывает, что теперь нет необходимости явно описывать тип для переменной, через которую мы обращаемся к элементам массива. Компилятор сам вычислит тип для i.

Важно отметить, что var в Java 10 является зарезервированныи именем типа, а не ключевым словом. В связи с этим переменные и методы можно назвать именем var, а вот для именования своих классов и интерфейсов использовать var больше не получится. Так как var не является ключевым словом, следующий фрагмент кода является корректным:

var var = 42; // локальная переменная var с вычисленным типом int,
              // инициализированная значением 42

В Java 10 возможности var достаточно ограничены. Например, переменные, объявленные как var, не могут использоваться в сигнатуре методов и других конструкциях, отличных от объявлений локальных переменных и for-циклов. Кроме того, var нельзя использовать при инициализации переменной массивом через { }, инициализации нескольких переменных в одной строке, а также в ряде других случаев.

Также стоит отметить, что при инициализации переменной через null, var использовать нельзя.

//var x = null; // Код не скомпилируется
String x = null;