gpt4 book ai didi

java - 覆盖 Scala 中的 equals 方法

转载 作者:行者123 更新时间:2023-12-04 00:33:03 24 4
gpt4 key购买 nike

我有以下代码。编译时出现错误提示
value email is not a member of Player

class Player(email: String)
{
override def equals(player: Any): Boolean = {
player match {
case p: Player => email.equals(p.email)
case _ => false
}
}
}

我是一名尝试使用 Scala 的 Java 程序员,但无法弄清楚为什么会发生此错误(据我了解,电子邮件是玩家实例的成员)。有人可以给出解释以及如何解决这个问题吗?

最佳答案

email只是一个构造函数参数,而不是类本身的成员。你可以通过在它前面加上 val 来实现它

class Player(val email: String) {
override def equals(player: Any): Boolean = {
player match {
case p: Player => email.equals(p.email)
case _ => false
}
}
}

为了完整起见,您也可以手动制作 email Player成员(member):
class Player(e: String) {
val email: String = e
...
}

或定义(如果您出于某种原因想要):
class Player(e: String) {
def email: String = e
...
}

正如@srgfed01 所提到的,您也可以在构造函数中包含访问修饰符。例如:
class Player(private val email: String) 

案例类会自动为您的类生成 getter,尽管默认情况下它们都是公开的。

我更喜欢第一种将构造函数参数声明为类成员的方法,因为它清晰、简洁并减少了代码困惑(想象一下,如果您有 10 个需要访问器的参数)。

关于java - 覆盖 Scala 中的 equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27691921/

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