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



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

第一个使用 as? 运算符将泛型注释类强制转换为 XYZ

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

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

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

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

在第二种情况下,将不安全的强制转换 (as( 用于可为空的类型 XYZ?。如果it是 XYZ 的实例或it为 null,那么它会it转换为 XYZ?(如果it为 null,则返回 null(。如果it不是 XYZ 的实例,它将引发异常。

据我所知

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

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

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

值转换 XYZ 可为空,并在转换后检查空

相关内容

最新更新