Was bedeutet das Schlüsselwort var und wie ist es zu verwenden?v.10

Das Schlüsselwort var dient im Rahmen der type inference als Platzhalter einer Datentypangabe.

Ab Java 10 sind Variablendeklarationen möglich, wie sie im Quelltextbeispiel angegeben sind. Hierbei wird anstelle des jeweiligen Datentyps das Schlüsselvor var vorangestellt. Der Compiler ermittelt hierbei den tatsächlichen Datentyp anhand des Kontextes.

Bei der Verwendung ist jedoch einiges zu beachten, das in der tabellarischen Übersicht unten zusammengestellt ist.

public class VarClass {

	private var z = 'Z';		                 // Fehler
	private static final var F = 10;	         // Fehler

	public static void main(String[] args) {
		allowedVar();
		var obj = (a, b) -> (a + b);		// Fehler
		System.out.println(obj.add(2, 3));	// Fehler
	}

	private static void allowedVar() {
		var a;			// Fehler
		var e = null;	        // Fehler

		var i = 87;

		var d = 3.14159;

		var f = Float.MAX_VALUE;

		var c = '@';

		var s = "Ene mene mu";

		var b = false;

		var r = new Rede();

		System.out.println(i);
		System.out.println(d);
		System.out.println(f);
		System.out.println((double) f);
		System.out.println(c);
		System.out.println(s);
		System.out.println(b);
		r.rede();
	}

	private static var gibVier() {	        // Fehler
		return 4;
	}

	private static void druckVier(var n) {	// Fehler
		System.out.println(n);
	}
}

interface Inter {
	int add(int a, int b);
}

class Rede {
	void rede() {
		System.out.println("Hallo Welt!");
	}
}
lauffähig nicht lauffähig
deklarierte und initialisierte lokale Variablen mit null oder uninitialisierte lokale Variablen
Instanz- und Klassenvariablen
Angabe in Lambda-Ausdrücken
Angabe in Methodensignaturen

Im Quelltext sind die in der Tabelle genannten Fehlerquellen als Kommentare ausgewiesen. Nach Auskommentieren der jeweiligen Zeilen einschließlich der beiden Methoden gibVier() und druckVier(var n) liefert das Ausführen des Quelltextes die folgende Ausgabe.

87
3.14159
3.4028235E38
3.4028234663852886E38
@
Ene mene mu
false
Hallo Welt!

In der dritten und vierten Zeile zeigt sich durch die unterschiedliche Ausgabe, dass zunächst korrekt ein float erkannt wurde, das dann in einen double-Wert gecastet wurde.