Java 10 : Maîtriser l'inférence de type pour variables locales (var)
JEP 286 — Inférence de type pour variables locales
C'est le changement de langage le plus visible de Java 10. Le mot-clé var permet de déclarer une variable locale sans spécifier son type ; le compilateur l'infère à partir de la valeur d'initialisation. Cette inférence est restreinte aux variables locales.
Ancienne vs nouvelle syntaxe
// Avant Java 10
String name = "Bienvenue sur tutorialspoint.com";
// Java 10+
var name = "Bienvenue sur tutorialspoint.com";
Le compilateur déduit que name est de type String.
Points clés
- ❌ Pas d'inférence pour : champs (variables membres), paramètres de méthode, types de retour.
- ✅ Initialisation obligatoire à la déclaration (sinon erreur de compilation).
- ✅ Disponible dans les blocs d'initialisation des boucles (
for (var i = 0; ...)). - ✅ Zéro coût à l'exécution : l'inférence se fait à la compilation.
- ✅ Typage statique : une fois le type inféré, il ne change pas (pas de typage dynamique).
- ✅ Réduit le code boilerplate, surtout avec les types génériques complexes.
Exemple avec types génériques
// Verbeux
Map<Integer, String> mapNames = new HashMap<>();
// Avec var
var mapNames1 = new HashMap<Integer, String>();
Exemple complet
import java.util.List;
public class Tester {
public static void main(String[] args) {
var names = List.of("Julie", "Robert", "Chris", "Joseph");
// Boucle for-each avec var
for (var name : names) {
System.out.println(name);
}
System.out.println();
// Boucle indexée avec var
for (var i = 0; i < names.size(); i++) {
System.out.println(names.get(i));
}
}
}
Sortie :
Julie
Robert
Chris
Joseph
Julie
Robert
Chris
Joseph
var n'est pas un mot-clé mais un nom de type réservé ; il reste utilisable comme nom de variable (mais déconseillé). Cette fonctionnalité s'inspire de var en C#, auto en C++, ou l'inférence de type en Scala/Kotlin.
Java
- Types de données primitifs en Java : Guide complet avec exemples
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Maîtriser le transtypage Java : De l'élargissement au rétrécissement et au-delà