在科特林,我们有as
和as?
以下内容有什么区别
(origin as? Implementor)?.someFunction()
vs
(origin as Implementor?)?.someFunction()
还是它们本质上相同?
答案 0 :(得分:2)
as?
将左侧的类强制转换为右侧的类,如果不可能,则返回null
。 as
的作用相同,但如果无法进行强制转换,则会引发异常。
在第一个示例中,您检查origin
是否为Implementor
类型,如果是,则调用someFunction()
。该行将永远不会引发异常,这意味着如果object
是null
或来自其他类型,它将什么都不做。
在第二个示例中,您强制转换origin
以键入Implementor
或null
,如果它不为null,则调用someFunction()
。如果对象来自其他类型,则该行将引发异常。