gpt4 book ai didi

scala - 如何重载父类(super class)方法

转载 作者:行者123 更新时间:2023-12-02 17:44:40 24 4
gpt4 key购买 nike

我有一个抽象类,它有一个将浮点列表作为参数的方法:

abstract class a {
def m(p: List[Float]) {
println("Passed List[Float] to p()")
}
}

我想在具体的扩展类中重载 m:

class b extends a {
def m(p: List[Double]) {
println("Passed List[Double] to p()")
}
}

有没有办法做到这一点?当我尝试它时,出现此错误:

error: name clash between defined and inherited member:
method m:(p: List[Double])Unit and
method m:(p: List[Float])Unit in class a
have same type after erasure: (p: List)Unit
def m(p: List[Double]) {

最佳答案

为此有一个 override 关键字,但在这种情况下,问题是编译时的 TypeErasure。第一个方法采用 List[Float],另一个采用 List[Double]

这些类型将被删除,因此您将获得两个方法,它们接受一个 List 并返回 Unit。这就是冲突。

更改名称

现在简单的解决方法是给它们不同的名字。

使用泛型

abstract class a[T] {
def m(p: List[T]) {
println("Passed List[Float] to p()")
}
}

class b extends a[Double] {
}

关于scala - 如何重载父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16617455/

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