【发布时间】:2018-03-20 13:20:39
【问题描述】:
给定
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 被弃用,而且我找不到任何相关资源。
确实,我可以使用其他方法来完成相同的任务,例如通过将我的案例类放宽为普通类并为colour 提供getter 并弃用后者,但我想知道是否实际上不可能弃用案例类字段以及 - 最终 - 原因。
谢谢。
更新
正如 Mike 正确指出的,colour 是案例类的必填字段,因此将此属性设置为 deprecated 的意义值得商榷。我想弃用 colour ,因为我现在提供来自另一个构造的 colour 信息,我想让用户知道 colour 不是获取该信息的正确实例,我将删除它来自Fruit 在下一个版本中。
到目前为止,我只想警告用户不要从 Fruit 属性中获取 colour 信息,而且我暂时不在乎他们是否可以创建带有颜色信息的水果实例。
更新 2
正如 Alexey 所说,我在编译时确实有过时的警告。但是为什么我不能观察到我的 IDE 代码中的弃用以及我弃用的方法呢?我希望像下面这样的东西
val fruit = Fruit("peer", "green")<br>val colour = fruit.<strike>colour</strike>
我正在使用 IntelliJ。
【问题讨论】:
-
感谢您的澄清!但是,我仍然有点困惑。您能否发布一个关于您如何使用其他构造提供颜色信息的表示?如果我们知道您希望未来的课程是什么样子,这将有助于我们制定更好的答案。
-
关于更新:这似乎是一个 IntelliJ 错误,应该在那里报告。
-
一般情况下,不要相信 IntelliJ 会在不编译检查的情况下为 Scala 正确报告错误和警告。
-
好的@AlexeyRomanov;你能用后面的更新编辑你的答案吗?我会接受你的回答,因为你证明了弃用案例类字段实际上是可能的。我在 YouTrack here 上打开了一个问题。
-
@spi-x-i 已更新。
标签: scala case-class