作为之间的区别?类型和作为类型?

Difference between as? Type and as Type?

我在弄清楚这两个语句之间的区别时遇到了问题。

第一个使用as?运算符将通用注释 class 转换为 XYZ

this::class.annotations.find { it is XYZ } as? XYZ ?: return

第二个使用as?运算符和空标记

this::class.annotations.find { it is XYZ } as XYZ? ?: return

在第一种情况下,您使用安全转换(as?)到不可为 null 的类型 XYZ。如果 it 是 XYZ 的实例,那么它只会将 it 转换为 XYZ。如果 it 不是 XYZ 的实例(或者如果 it 为空),那么它将 return 为空。

在第二种情况下,您使用不安全的强制转换 (as) 来转换为可空类型 XYZ?。如果 it 是 XYZ 的实例或 it 为 null,那么它会将 it 转换为 XYZ? (或者 return 为空,如果 it 为空)。如果 it 不是 XYZ 的实例,则会抛出异常。

据我所知

this::class.annotations.find { it is XYZ } as? XYZ

值转换 XYZ 不为空但值在转换前检查为空

this::class.annotations.find { it is XYZ } as XYZ?

值转换 XYZ 可以为 null 并在转换后检查 null