jre jdk for developers java java-10

java - for - jdk 10 download



¿Qué tipo de token es exactamente “var” en Java 10? (2)

En el último número del boletín de Heinz Kabutz, # 255 Java 10: Variables locales inferidas , se muestra que var no es una palabra reservada en Java 10, porque también puede usar var como identificador:

public class Java10 { var var = 42; // <-- this works }

Sin embargo, no puede usar ie assert como un identificador, como en var assert = 2 , porque assert es una palabra reservada.

Como se indica en el boletín enlazado, el hecho de que var no sea una palabra reservada es una buena noticia, ya que permite el código de versiones anteriores de Java que utiliza var como identificador para compilar sin problemas en Java 10.

Entonces, ¿qué es var entonces? No es un tipo explícito ni una palabra reservada del lenguaje, por lo que se le permite ser un identificador, sin embargo, tiene un significado especial cuando se utiliza para declarar una variable local en Java 10. ¿Cómo lo llamamos exactamente en el contexto de un declaración de variable local?

Además, además de admitir la compatibilidad con versiones anteriores (al permitir que se compile el código anterior que contiene var como identificador), ¿existen otras ventajas para que var no sea ​​una palabra reservada?


var es un nombre de tipo reservado var no es una palabra clave, es un nombre de tipo reservado.

Podemos crear una variable llamada "var".

Puedes leer here para más detalles.

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


De acuerdo con JEP-286: Inferencia de tipo de variable local , var es

no una palabra clave; en su lugar, es un nombre de tipo reservado .

(Las versiones anteriores de JEP dejaron espacio para la implementación como un nombre de tipo reservado o como una palabra clave sensible al contexto; finalmente se eligió la ruta anterior).

Debido a que no es una "palabra clave reservada", es posible seguir usándola en nombres de variables (y nombres de paquetes), pero no en nombres de clase o interfaz.

Creo que la razón más importante para no hacer que var una palabra clave reservada es la compatibilidad con el código fuente anterior.