【问题标题】:Kotlin how to enforce child class from parent classKotlin如何从父类强制执行子类
【发布时间】:2021-09-28 03:19:37
【问题描述】:

这感觉超级琐碎,但我的谷歌和堆栈溢出结果充满了完全不相关的东西。

在java中,如果一个方法调用返回一个父类对象,即

ParentClass instance = someCall();

您可以将其强制为子类并通过调用子类特定方法

(ChildClass) instance.doChildClassThings()

在 kotlin 中是如何工作的?

【问题讨论】:

  • 你所做的被称为“类型转换”,或者只是“转换”。
  • @Slaw 今天我的脑子里没有这个词,但我很高兴 Stackoverflow 和往常一样快。
  • 你说的是实例方法,还是静态方法?如果类不是正确的类型,强制转换会报错,但不会改变调用哪个实例方法(因为它们是动态调度的)。但这不是您的 Java 示例正在做的事情,因为没有进一步的括号,转换将应用于调用的 result

标签: class kotlin inheritance


【解决方案1】:

除了 Matt 的回答,请注意,对于 Java 中的一种常见用法(甚至可能是最常见的),您不需要在 Kotlin 中需要 as;也就是说,如果你在检查instance实际上属于ChildClass之后进行转换,那么用Java编写

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

在 Kotlin 中,感谢smart-casting,写够了

if (instance is ChildClass) {
    instance.doChildClassThings()
}

并且编译器插入强制转换。

【讨论】:

【解决方案2】:

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

相同的功能

(ChildClass) instance.doChildClassThings()

instance.doChildClassThings() as ChildClass

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

(instance as ChildClass).doChildClassThings()

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

【讨论】:

  • 感谢,我的google fu明显生锈了
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2018-09-26
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多