我在弄清楚这两个语句之间的区别时遇到了问题。
第一个使用 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 可为空,并在转换后检查空