Pomyśl o operatorach trójskładnikowych, takich jak metoda w tym przypadku. Mówiąc a ? b : c
jest (dla zamiarów i celów bierzesz pod uwagę, patrz komentarz lasseespeholt za) równoważne wywołaniu metody pseudokod:
ternary(a, b, c)
if a
return b
else
return c
dlatego ludzie mogą mówić takie rzeczy jak x = a ? b : c
; jest to po prostu jak powiedzenie x = ternary(a, b, c)
. Kiedy mówisz (condition) ? doThis() : doThat()
, jesteś w rzeczywistości, mówiąc:
if condition
return doThis()
else
return doThat()
Spójrz co się dzieje, jeśli staramy się zastąpić metody co wrócą
if condition
return ???
else
return ???
To nie ma sensu, aby go rozważyć . doThis()
i doThat()
nic nie zwracają, ponieważ void
nie jest typem natychmiastowym, więc metoda ternary
również nie może niczego zwrócić, więc Java nie wie, co zrobić z oświadczeniem i skargami.
Jest wiele sposobów na obejście tego problemu, ale wszystkie są złymi praktykami (można zmodyfikować metody, aby uzyskać wartość zwracaną, ale nie robić nic z tym, co zwracają, można tworzyć nowe metody wywołujące metody, a następnie return null, itp.). Znacznie lepiej jest po prostu użyć instrukcji if
w tym przypadku.
EDIT Co więcej, jest jeszcze większy problem. Nawet jeśli zwracałeś wartości, Java nie traktuje w żadnym sensie stwierdzenia w postaci a ? b : c
.
Nie, nie tak. Po prostu użyj 'if' jak normalna osoba. –
Wierzę, że operator trójdzielny ma przypisać wartości do instancji typu, przy sprawdzaniu warunku. sposób, w jaki sugerujesz, że jest, nie jest zadowalający format. –
@codesparkle - mało miejsca. if (warunek) {doThis();} else {doThat();} – tehdoommarine