gpt4 book ai didi

scala - 实际上可以弃用 Scala 案例类字段吗?

转载 作者:行者123 更新时间:2023-12-04 11:33:44 26 4
gpt4 key购买 nike

给定的

case class Fruit(name: String, colour: String)

我想弃用案例类字段 colour .

我试图通过同时使用 Scala @deprecated 来实现前者。
case class Fruit(name: String, @deprecated("message", "since") colour: String)

和 Java @Deprecated注解
case class Fruit(
name: String,
/* @Deprecated with some message here */
@(Deprecated @field)
colour: String
)

不幸的是,我无法制作 colour在任何情况下都已弃用,我无法找到任何相关资源。

事实上,我可以使用其他方法完成相同的任务,例如通过将我的案例类放宽到普通类并提供 gettercolour并弃用后者,但我想知道弃用 case 类字段是否实际上是不可能的,以及 - 最终 - 原因。

谢谢你。

更新

正如迈克正确指出的那样, colour是case类的必填字段,所以设置这个属性为 deprecated的意义是有争议的。我想弃用 colour ,因为我现在提供 colour来自另一个构造的信息,我想让用户知道 colour不是获取该信息的正确实例,我将从 Fruit 中删除它在下一个版本中。

现在,我只想警告用户不要获取 colour来自 Fruit 属性的信息,暂时,我真的不在乎他们是否可以创建带有颜色信息的水果实例。

更新 2

正如阿列克谢所说,我在编译时确实有过时的警告。但是,为什么我不能在我的 IDE 代码中观察到弃用以及我会弃用一个方法呢?我希望类似以下内容
val fruit = Fruit("peer", "green")
val colour = fruit. colour

我正在使用 IntelliJ。

最佳答案

这是一个奇怪的用例。如果不推荐使用必填字段,那么当然也必须不推荐使用类本身吗?也就是说,假设您正在尝试做的事情是可能的,那么在没有收到弃用警告的情况下根本不可能使用该类。 (这可能解释了为什么这是不可能的。)

也就是说,正如您所指出的,有多种方法可以实现您的目标。这是其中之一:

case class Fruit(name: String) {

@deprecated("message", "since")
val colour: String = "some default value"
}

object Fruit {

// Deprecated factory method.
@deprecated("message", "since")
def apply(name: String, colour: String): Fruit = Fruit(name)
}

显然,这假设 colour不再需要作为 Fruit 的属性. (如果需要,则不应弃用。)它的工作原理是弃用创建 Fruit 的工厂方法。使用 colour值(value)。

如果这不起作用,您能解释为什么需要弃用该字段吗?

关于scala - 实际上可以弃用 Scala 案例类字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49385374/

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