Quel type de jeton correspond exactement à «var» dans Java 10?

Dans le dernier numéro de la lettre d’information de Heinz Kabutz, # 255 Java 10: Variables locales inférées , il est indiqué que var n’est pas un mot réservé dans Java 10, car vous pouvez également utiliser var comme identifiant:

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

Cependant, vous ne pouvez pas utiliser ie assert comme identifiant, comme dans var assert = 2 , car assert est un mot réservé.

Comme il est dit dans la newsletter liée, le fait que var ne soit pas un mot réservé est une bonne nouvelle, car cela permet au code des versions précédentes de Java qui utilise var comme identifiant de comstackr sans problèmes dans Java 10.

Alors, quelle est la var alors? Ce n’est ni un type explicite, ni un mot réservé du langage, il est donc autorisé à être un identifiant. Cependant, il a une signification particulière lorsqu’il est utilisé pour déclarer une variable locale en Java 10. Comment l’appelle-t-on exactement dans le contexte d’un déclaration de variable locale?

En outre, outre le fait de prendre en charge la compatibilité avec les versions antérieures (en autorisant la compilation d’un code plus ancien contenant var comme identifiant), existe-t-il d’autres avantages à ce que var ne soit pas un mot réservé?

Selon le JEP-286: Inférence de type variable locale , var est

pas un mot clé; c’est plutôt un nom de type réservé .

(Les versions antérieures du PEC laissaient la possibilité de mettre en œuvre un nom de type réservé ou un mot clé contextuel; le chemin d’access précédent a finalement été choisi.)

Comme il ne s’agit pas d’un “mot clé réservé”, il est toujours possible de l’utiliser dans les noms de variable (et de package), mais pas dans les noms de classe ou d’interface.

Je pense que la principale raison de ne pas faire de var un mot clé réservé est la compatibilité ascendante avec l’ancien code source.

var est un nom de type réservé var n’est pas un mot clé, c’est un nom de type réservé.

Nous pouvons créer une variable nommée “var”.

vous pouvez lire ici pour plus de détails.

 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{ } // Comstack Error LocalTypeInference.java:45: error: 'var' not allowed here class var{ ^ as of release 10, 'var' is a ressortingcted local variable type and cannot be used for type declarations 1 error interface var{ } // Comstack 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