Zgodnie z Kotlin docs,?. operator reprezentuje "bezpieczne połączenie", co oznacza, że jeśli jest używany w łańcuchu wywołań metod, cały łańcuch zwróci wartość null, jeśli wartość tego, na czym jest używana, jest zerowa.Co robi?. znaczy w Kotlin, gdy jest używany po lewej stronie zadania?
Ale co z tym, czy jest używany po lewej stronie zadania? Ponieważ lewa strona nie jest stroną, która "zwraca" coś, wydaje się, że prawdopodobnie ma ona inny efekt. Oto przykład tego, co mówię:
val myObj = SomeObj()
myObj?.property = SomeClass.someFunc() // What does ?. do in this context?
Jest to interesujące, ponieważ w przypadku, gdy przypisujesz coś do wartości opartej na samym sobie, nadal musisz używać go po prawej stronie, aby uniknąć błędu kompilatora. (np. myObj? .property = myObj? .property + 1) – Sonofblip
@Sonofblip, jest inny powód: w środowisku wielowątkowym (w którym znajduje się JVM), zmienna globalna 'myObj' może zostać ponownie przypisana między czekiem po lewej stronie i ocena 'myObj? .property' po prawej stronie. Musisz to sprawdzić ponownie. – hotkey
@ skeykey, pierwsze up-vote. ale nie musi to sprawdzać ponownie w wielu wątkach, ponieważ kotlina kopiuje odniesienie do innej zmiennej. –