Какой тип токена точно является " var " в Java 10?
в последнем номере бюллетеня Хайнц Kabutz, а #255 Java 10: Выведенные Локальные Переменные, он показал, что var
не является зарезервированным словом в Java 10, потому что вы также можете использовать var
в качестве идентификатора:
public class Java10 {
var var = 42; // <-- this works
}
, вы не можете использовать, т. е. assert
в качестве идентификатора, как в var assert = 2
, потому что assert
- это зарезервированное слово.
как сказано в связанном бюллетене, тот факт, что var
не зарезервированное слово-хорошая новость, потому что это позволяет код из предыдущих версий Java, который использует var
как идентификатор для компиляции без проблем в Java 10.
Итак,var
потом? Это ни явный тип, ни зарезервированное слово языка, поэтому разрешено быть идентификатором, однако он имеет особое значение при использовании для объявления локальной переменной в Java 10. Что именно мы называем это в контексте локальной переменной?
кроме того, помимо поддержки обратная совместимость (позволяя более старый код, содержащий var
как идентификатор для компиляции), есть ли другие преимущества для var
не быть зарезервированным словом?
2 ответов
по данным JEP-286: вывод типа локальной переменной, var
is
не ключевое слово, это зарезервированное имя типа.
(более ранние версии JEP оставили место для реализации либо как зарезервированное имя типа, либо как контекстно-зависимое ключевое слово; в конечном итоге был выбран первый путь.)
поскольку это не "зарезервированное ключевое слово", его можно использовать в именах переменных (и пакете names), но не в именах классов или интерфейсов.
Я бы подумал, что самая большая причина не делать var
зарезервированное ключевое слово имеет обратную совместимость со старым исходным кодом.
var-это зарезервированное имя типа var не является ключевым словом, это зарезервированный тип имя.
мы можем создать переменную с именем "var".
вы можете узнать здесь для получения более подробной информации.
var var = 5; // syntactically correct
// var is the name of the variable
“var” as a method name is allowed.
public static void var() { // syntactically correct
}
“var” as a package name is allowed.
package var; // syntactically correct
“var” cannot be used as the name of a class or interface.
class var{ } // Compile Error
LocalTypeInference.java:45: error: 'var' not allowed here
class var{
^
as of release 10, 'var' is a restricted local variable type and cannot be used for type declarations
1 error
interface var{ } // Compile Error
var author = null; // Null cannot be inferred to a type
LocalTypeInference.java:47: error: cannot infer type for local variable author
var author = null;
^
(variable initializer is 'null')
1 error