Kotlin 如何从父 class 强制执行子 class

Kotlin how to enforce child class from parent class

这感觉非常微不足道,但我的 google 和堆栈溢出结果充满了完全不相关的东西。

在java中,如果方法调用returns一个父class对象,即

ParentClass instance = someCall();

您可以将其强制为子 class 并通过

调用子 class 特定方法
(ChildClass) instance.doChildClassThings()

在 kotlin 中是如何工作的?

您可以使用 as 关键字实现与

相同的功能

(ChildClass) instance.doChildClassThings()

instance.doChildClassThings() as ChildClass

或者如果 instance 是您正在寻找的 ChildClass

(instance as ChildClass).doChildClassThings()

https://kotlinlang.org/docs/typecasts.html

除了 Matt 的回答之外,请注意,对于 Java 中的一种常见用法(甚至可能是最常见的),您 不需要 as 在科特林中;也就是说,如果你在检查 instance 实际上属于 ChildClass 之后投射,在 Java 你写

if (instance instanceof ChildClass) {
    ((ChildClass) instance).doChildClassThings();
}

在Kotlin中,感谢smart-casting,写

就足够了
if (instance is ChildClass) {
    instance.doChildClassThings()
}

编译器插入转换。