Является ли `foo as? Foo` полный эквивалент `foo as Foo?` В kotlin?

Является ли foo as? Foo foo as? Foo полный эквивалент foo as Foo? ?

Если да, то почему у обоих есть?

Если нет, то в чем разница?

Solutions Collecting From Web of "Является ли `foo as? Foo` полный эквивалент `foo as Foo?` В kotlin?"

as? является оператором безопасного литья .

Обычно, если вы пытаетесь использовать переменную, и она терпит неудачу, вы получаете ClassCastException . Используя этот оператор, он просто возвращает null вместо этого в этом случае.

Это означает, что возвращаемый тип foo as? Foo Выражение Foo? самом деле Foo? , потому что он может вернуть значение null .


foo as Foo? является литой foo для нулевых Foo? type, это может вызвать исключение, если переменная не относится к этому типу (т. е. это не экземпляр Foo или null ).