【问题标题】:Is it possible to declare a public field in Scala [duplicate]是否可以在 Scala 中声明一个公共字段 [重复]
【发布时间】:2015-08-22 17:44:10
【问题描述】:

我想知道是否可以在 Scala 类中声明一个公共字段。 Scala 通常会为 val 和 var 主体变量/构造函数参数和 getter/setter 生成一个具有适当可见性的私有字段。

我想知道是否可以在 Scala 中声明公共 Java 类 field,而不是 getter。


PS:为什么会有人需要它?它可能有用,例如与依赖字段的 Java 框架集成:

class MyTest extends JUnitSuite {
    @Rule 
    val temporaryFolder = new TemporaryFilder() 
    // throws java.lang.Exception: The @Rule temporaryFolder must be public
}

【问题讨论】:

  • 恐怕 Chris Martin 是对的。这是一个重复的问题,答案是“不可能”,除非你混合了一些 Java。
  • 好吧,太糟糕了。我编辑了链接的问题,以便更容易找到公共 field

标签: scala syntax visibility


【解决方案1】:

这是对P.S的回应,其他人已经发布了对主要问题的答案。

因为在 setter 中使用 getter 背后的逻辑(例如在 java 中)是为了“面向未来”你的代码,所以如果你的私有字段“x”在你每次获取/设置时都需要逻辑,那么您将只修改方法调用,而不会破坏任何调用它的现有代码。然而,如果您只有公共字段并且需要逻辑,您将不得不创建 getter/setter,然后由于更改类的合同而破坏现有代码。所以 scala 只是自动执行此操作以删除样板代码。

希望这会有所帮助!

【讨论】:

  • 非常确定 OP 知道这一点; PS 说明了为什么尽管您提出了论点,但公共字段可能是必要的。
  • @Sivalion PS 解释了为什么 OP 需要他们所要求的,而不是另一个问题。
  • 抱歉,感谢您的澄清
猜你喜欢
  • 2018-10-29
  • 2012-05-08
  • 2011-08-19
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2016-11-23
相关资源
最近更新 更多