提问人:Star Shade 88 提问时间:12/15/2022 最后编辑:Star Shade 88 更新时间:12/15/2022 访问量:236
使用现有父类的值实例化子类
Instantiate child class with values of existing parent class
问:
我想将现有父类的值转移到新的子类。如果可能的话,不要反思。 另一个可能的解决方案是,如果我可以将类“强制”到子类。
这是我想要实现的目标的简化示例。
open class Dog {
var height = -1
}
class Dalmatian: Dog() {
var dots = -1
}
fun main() {
val dog: Any = Dog().apply {
height = 24
}
// Doesn't work
val dalmatian = (dog as Dalmatian).apply {
dots = 101
}
}
答:
0赞
Jorn
12/15/2022
#1
没有将类转换为子类型的内置方法。在你的例子中,你可以做一个方法:
class Dog(var height: Int = -1)
class Dalmation(height: Int = -1, var dots: Int = 24): Dog(height) {
companion object {
fun fromDog(dog: Dog, dots: Int) = Dalmation(dog.height, dots)
}
}
然后,您可以转换:
fun main() {
val dog = Dog()
val dalmation = Dalmation.fromDog(dog, 24)
}
并且只有当狗已经是斑点狗时,您才能施放:
fun main() {
val dog: Dog = Dalmatian()
val dalmatian: Dalmatian = dog as Dalmatian
// but not this
val dalmatian: Dalmatian = Dog() as Dalmatian
}
评论
0赞
Developer-Mike
12/15/2022
谢谢你的回答。实际的超类有大量的变量,所以你的解决方案实现起来会很痛苦。我想我宁愿去反思。
评论