Un reproche qui revient régulièrement en ce qui concerne Java est le fait que le langage semble plutôt « verbeux » comparé à d'autres langages plus modernes. Par exemple, il convient d'écrire :
LinkedList
Même si des améliorations dans le langage apportées lors des JDK7 et 8 permettent désormais d'écrire LinkedList
Une nouvelle proposition d'amélioration du JDK (JEP ou JDK Enhancement Proposal) en date du 8mars2016 vient de voir le jour, la JEP 286: Local-Variable Type Inference. Le but de cette nouvelle proposition est d'introduire le type réservé var ou val pour permettre donc de rendre les déclarations des variables locales plus concises et ainsi se rapprocher de ce qui se fait dans des langages concurrents (*atchoum* C# *atchoum* ; ainsi le typeréservé auto du C++ n'aura pas été retenu). La proposition mentionne également qu'il serait possible d'introduire val ou let en tant que raccourci syntaxique pour final var.
Si la proposition est retenue, ce mot serait utilisable pour les variables locales, les boucles for-each et les boucles for traditionnelles. Il ne serait pas utilisable pour les paramètres de méthode ou d'un constructeur, la valeur de retour d'une méthode, le catch ou encore la déclaration des membres d'une classe. Il deviendra alors possible d'écrire dans une variable locale d'une méthode : var list = new LinkedList
De plus, certains aménagements dans les règles habituelles seront nécessaires : il y a trop de code existant pouvant utiliser var ou val comme nom de variable, et il est donc impossible de faire que ces mots soient définis en tant que mots-clés du langage d'où le choix d'un type réservé. Enfin, un travail de simplification doit être fait au niveau du compilateur pour rendre les messages d'erreurs plus facilement interprétables par le programmeur dans les cas suivants où l'inférence est impossible :
var x;
-> erreur : la variable n'est pas initialisée, impossible d'inférer son type.
var f = () -> { };
-> erreur : le type de la lambda doit être explicite.
var g = null;
-> erreur : initialisé à null, impossible d'inférer son type.
var c = l()
-> erreur : impossible de dénoter le type inféré (? il faudrait voir le type déclaré de l() dans le code de test).
var m = this::l;
-> erreur : le type de la référence de méthode doit être explicite.
var k = { 1 , 2 };
-> erreur : le type du tableau doit être explicite.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.