Ce face var
Cu var nu mai scrii tipul variabilei locale: compilatorul îl deduce din expresia de inițializare. var oras = "Iași"; declară o variabilă de tip String. Tipul este stabilit la compilare și nu se mai schimbă, deci Java rămâne un limbaj cu tipuri statice.
var funcționează doar pentru variabile locale cu inițializare, în for, în for-each, în try-with-resources și la parametrii lambda. Nu se poate folosi pentru câmpuri, parametri de metode sau tipuri returnate, și nici fără valoare inițială sau cu null.
Este util când tipul este lung și evident (var harta = new HashMap<String, List<Integer>>();). Când tipul nu reiese din dreapta (var x = calculeaza();), un tip explicit face codul mai ușor de citit. Tehnic, var nu este cuvânt cheie, ci un „nume de tip rezervat”: poți avea în continuare o variabilă numită var.
Exemple
Exemplul 1: Tipul dedus
getClass().getSimpleName() arată tipul obiectului. Pentru primitive, valoarea este împachetată (de exemplu în Integer) doar ca să poată fi afișată.
import java.util.ArrayList;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
var oras = "Iași";
var populatie = 271_692;
var suprafata = 93.9;
var note = new ArrayList<Integer>();
var orase = new HashMap<String, Integer>();
note.add(9);
orase.put(oras, populatie);
System.out.println(oras + " -> " + oras.getClass().getSimpleName());
System.out.println(populatie + " -> " + ((Object) populatie).getClass().getSimpleName());
System.out.println(suprafata + " -> " + ((Object) suprafata).getClass().getSimpleName());
System.out.println(note + " -> " + note.getClass().getSimpleName());
System.out.println(orase + " -> " + orase.getClass().getSimpleName());
}
}
Rezultat
Iași -> String
271692 -> Integer
93.9 -> Double
[9] -> ArrayList
{Iași=271692} -> HashMap
Exemplul 2: var în bucle
În for-each, var primește tipul elementelor (Map.Entry<String, Double>), un tip lung de scris.
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
var medii = new TreeMap<String, Double>(Map.of("Ana", 9.5, "Mihai", 8.25, "Ioana", 9.75));
for (var intrare : medii.entrySet()) {
System.out.println(intrare.getKey() + ": " + intrare.getValue());
}
for (var i = 1; i <= 3; i++) {
System.out.print(i + " ");
}
System.out.println();
}
}
Rezultat
Ana: 9.5
Ioana: 9.75
Mihai: 8.25
1 2 3
Greșeli frecvente
var x;sauvar x = null;:cannot infer type for local variable x.- Așteptarea ca
varsă permită schimbarea tipului:var n = 5; n = "cinci";nu compilează. var lista = new ArrayList<>();deduceArrayList<Object>. Scrie tipul elementelor:new ArrayList<String>().
Comenzi înrudite
Variabile și tipuri primitive: O variabilă are un tip fix, declarat la creare; Java are 8 tipuri primitive: byte, short, int, long, float, double, char, boolean.Generics (tipuri generice): Generics parametrizează clase și metode cu tipuri (List<String>, Map<String, Integer>), ca erorile de tip să apară la compilare, nu la rulare.Iteratori și for-each: for-each parcurge pe rând elementele unui array sau ale oricărui Iterable; un Iterator permite și ștergerea în timpul parcurgerii.Expresii lambda: O lambda este o funcție scurtă, fără nume, scrisă ca parametri -> corp, folosită oriunde se așteaptă o interfață funcțională.