foo as? Foo
完全相当于foo as Foo?
?
如果是,那为什么两者都有?
如果没有那么有什么区别?
答案 0 :(得分:9)
as?
是safe cast operator。
通常,如果您尝试投射变量,但失败,则会得到ClassCastException
。在这种情况下,使用此运算符只会返回null
。
这意味着foo as? Foo
表达式的返回类型实际上是Foo?
,因为它可能会返回null
。
foo as Foo?
是可归foo
类型的Foo?
的强制转换,如果变量不属于该类型,它仍然会产生异常(即它不是{{1}实例或Foo
)。