作为之间的区别?类型和作为类型?
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
我在弄清楚这两个语句之间的区别时遇到了问题。
第一个使用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