gpt4 book ai didi

java - Kotlin 在抽象类中调用伴随对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:45 27 4
gpt4 key购买 nike

我有一个类,Base,它是一个抽象类,定义为:

abstract class Base() {}

我想从这个基类创建一些派生类:

class A : Base() {}
class B : Base() {}
class C : Base() {}

我希望能够调用一个通用函数 create 来完成一些初始化工作并返回指定的派生类(例如 A)。例如,像下面这样的东西是理想的:

val a = A.create() // `a` now holds an instance of `A`.
val b = B.create()
val c = C.create()

最初我尝试在抽象类中使用伴随对象作为一种静态函数:

abstract class Base {
companion object {
fun create() : Base {
// Do some initialization and return the derived class
// of the object. Obviously I can't return `Base` as I've
// indicated above since it is an abstract class. This is
// what I'm confused about: How do I return a copy of the
// _derived_ class here? Is this impossible? I think it
// might be...
return Base() // <-- This doesn't work. What should be returned?
}
}
}

然后在派生类中:

class A : Base() {
companion object {
fun create() : A = Base.create()
}
}

这行不通,原因很明显。也就是说,我无法返回抽象类 Base 的实例。有没有一种简单的方法来完成 var a = A.create() 范例? create 的代码在派生类中是相同的,因此我想避免在我创建的每个类中重新创建功能。

最佳答案

如果初始化逻辑相同,并且是基于 Base 类中指定的功能,您也可以这样做:

abstract class Base() {

protected fun init(): Base {
// do the initialization
return this
}
}

class A : Base() {
companion object {
fun create() = A().init() as A
}
}

关于java - Kotlin 在抽象类中调用伴随对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com