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 :-)
Brak komentarzy:
Prześlij komentarz