source as pau1adam цитирует, фактически только говорит, что участник выигрывает, когда участник применим.Это означает, что определение функции расширения toUpperCase()
для обнуляемого типа String?
полностью допустимо.
- При вызове
toUppercase()
для ненулевого String
вызывается функция-член. - При вызове
toUppercase()
для обнуляемого String?
функция-член отсутствует.Таким образом, вызывается функция расширения.
Оператор безопасного вызова ?.
фактически автоматически передает this
в ненулевой тип String
, поэтому определенная вами функция делает именно то, что вам нужно.
Более подробную информацию можно найти в источнике , где объясняется, как можно реализовать Any?.toString()
.