wtorek, listopada 11, 2025

_ w Java'ie :-)

Ha! dziś się naumiałem, że w końcu w Java'ie (może od 21, ja to 25 sprawdziłem) _ jest zmienną "throw away" :-)

O co chodzi?

Np. jeśli robimy coś takiego:

m.computeIfAbsent(key, k -> new ArrayList<>()).add(val);

to to k jest zmienną, jak na zewnątrz jest zmienna k to mamy problem i się nie skompiluje:

var k = 7;
m.computeIfAbsent(key, k -> new ArrayList<>()).add(val);

bo będzie sie pluło w k ->, że k jest już zadeklarowana w scope'ie...

Teraz można użyć _ zamiast k:

m.computeIfAbsent(key, _ -> new ArrayList<>()).add(val);

co niby nie robi różnicy (chociaż od pewnego momentu taki kod się nie kompilował), ale teraz można mieć coś takiego:

var _ = 7;
m.computeIfAbsent(key, _ -> new ArrayList<>()).add(val);

i się skomplikuje bo to _ jest throw away... więc np. takie coś:

var _ = 7;
System.out.println(_); // <--- Using '_' as a reference is not allowed
m.computeIfAbsent(key, _ -> new ArrayList<>()).add(val);

to kompilator zakrzyknie, że ej, nie wolno.

Mała rzecz, a cieszy :-)