gpt4 book ai didi

Scala 抽象类方法,返回一个新的对应类子对象

转载 作者:行者123 更新时间:2023-12-04 17:39:01 26 4
gpt4 key购买 nike

我脑子里有以下类(class):

abstract class MyClass (data: MyData) {

def update(): MyClass = {
new MyClass(process())
}

def process(): MyData = {
...
}

}

然而,抽象类不能被实例化,所以行 new MyClass(process())是一个错误。我的问题是 - 有什么方法可以告诉编译器,在 MyClass 的每个子类的情况下,我想创建一个完全属于该子类的对象?在所有子类中完整地编写这个方法似乎有点矫枉过正。使用类或方法的类型参数我自己无法实现。

最佳答案

这样的事情怎么样? MyClass用具体类型参数化。当然,所有具体类都必须实现一个方法,该方法实际返回 Self 的新实例。 .

trait MyClass[+Self <: MyClass[Self]] {
def update(): Self = {
makeNew(process())
}

def process(): MyData = {
// ...
}

protected def makeNew(data: MyData): Self
}

class Concrete0 extends MyClass[Concrete0] {
protected def makeNew(data: MyData) = new Concrete0
}

class RefinedConcrete0 extends Concrete0 with MyClass[RefinedConcrete0] {
override protected def makeNew(data: MyData) = new RefinedConcrete0
}

信用: IttayD’s second update to his answerthis question .

关于Scala 抽象类方法,返回一个新的对应类子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8835881/

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