Mam fragment kodu, w którym interfejs ma opcjonalną metodę zwracania i niektóre klasy, które implementują go, aby zwrócić coś, a inne nie.Java 8 opcjonalnie dodaje wynik zwrotny tylko, jeśli optional.isPresent
W celu wykorzystania tej Brilliant „zerowej killer”, oto co próbowałem:
public interface Gun {
public Optional<Bullet> shoot();
}
public class Pistol implements Gun{
@Override
public Optional<Bullet> shoot(){
return Optional.of(this.magazine.remove(0));
}//never mind the check of magazine content
}
public class Bow implements Gun{
@Override
public Optional<Bullet> shoot(){
quill--;
return Optional.empty();
}
}
public class BallisticGelPuddy{
private Gun[] guns = new Gun[]{new Pistol(),new Bow()};
private List<Bullet> bullets = new ArrayList<>();
public void collectBullets(){
//here is the problem
for(Gun gun : guns)
gun.shoot.ifPresent(bullets.add(<the return I got with the method>)
}}
Przepraszam za głupie, jak w tym przykładzie jest.
Jak mogę sprawdzić otrzymany zwrot i dodać go tylko jeśli jest obecny, używając opcji opcjonalnej?
P.S. Czy istnieje jakaś użyteczność dla Opcjonalnego, która jest, jeśli (X! = null) nie może zrobić?
"P.S. Czy istnieje jakaś użyteczność dla Opcjonalnego, jeśli nie można (X! = Null)?" - Jestem wielkim fanem Opcjonalnego, ale jednocześnie uważam to za niemal formę komentarza.Kiedy zobaczysz coś w rodzaju Opcjonalnie, powinieneś automatycznie * wiedzieć *, że może tam nie być; jednak większość wartości, które * mogą * utrzymywać wartość null, nigdy * nie *, więc nie jest powszechną praktyką otaczanie absolutnie każdego de-odniesienia zerowymi kontrolami. –
@EdwardPeters Nie chcę tego zamienić w jakąś krwawą łaźnię, ale zgadzam się z [tym gościem tutaj] (http://huguesjohnson.com/programming/java/java8optional.html): o co ci chodzi? Zgadzam się z wrażeniem "Och, opcjonalnie! Lepiej być pewnym, że rzeczywiście istnieje", ale myślę, że można było zrobić trochę lepiej. – Vale
Częścią korzyści, którą widzę, jest jasność. Za każdym razem, gdy widzisz opcję "Opcjonalnie", która ma przypisaną wartość "null", * wiesz *, że jest ona nieprawidłowa i może czuć się uzasadniona w jej naprawieniu. Kiedy zobaczysz, że wartość null jest przypisana do innej wartości ... cóż, kto wie, może to jest właściwe. Uważam też, że filozoficznie: "Rzecz, która może być niczym", naprawdę powinno być innego rodzaju niż "Rzecz, która musi być czymś". Można to zrobić lepiej, ale tylko wtedy, gdy jest częścią języka od podstaw ... i, IMO, Java jest o jedną część świni do trzech części szminki. –