Ich versuche, die ifPresent()
Methode der Optional
API in Java 8.Gemäßer Gebrauch von Optional.ifPresent()
Ich habe einfache Logik zu verstehen:
Optional<User> user=...
user.ifPresent(doSomethingWithUser(user.get()));
Aber dies führt zu einem Kompilierungsfehler :
ifPresent(java.util.functionError:(186, 74) java: 'void' type not allowed here)
natürlich kann ich so etwas tun:
if(user.isPresent())
{
doSomethingWithUser(user.get());
}
Aber das ist genau wie eine überladene null
überprüfen.
Wenn ich ändern Sie den Code in dem:
user.ifPresent(new Consumer<User>() {
@Override public void accept(User user) {
doSomethingWithUser(user.get());
}
});
Der Code wird immer dreckiger, was ich gehe zurück zu dem alten null
Check denken läßt.
Irgendwelche Ideen?
Dieser Code wird überladen .. ein Null-Check wird viel sauberer sein. denkst du nicht besonders, dass DoSomethingWithUser keine statische Methode ist? – rayman
Welcher Code?Die eine, die Sie verwenden sollten, ist die zweite, die die Instanz (d. H. Nicht statische) Methode doSomethingWithUser() aufruft. Ich sehe nicht, wie es überladen ist. Der letzte Code ist dazu da, Ihnen das Äquivalent des Lambda in einer vor-Lambda-Welt zu erklären. Benutze es nicht. –
Ahh ich verstehe dich. Wenn ich nicht in einer Lambda-Welt bin, gibt es keine Verwendung für die Option api eh – rayman