Scala:我可以声明一个在编译时不会生成 getter 和 setter 的公共(public)字段吗?

标签 scala

在 Scala 中,当您声明 val 或 var 时,Scala 会在编译为字节码时自动为您生成私有(private)字段以及 getter 和 setter。

例如。

class myClass {
    val name = "My Name"
}

将编译以创建等效的
class myClass {
    private string name;
    public string name();
    public void name_$eq(string);
}

其中 name() 和 name_$eq 是私有(private)字符串名称的 getter 和 setter。

我知道您可以通过将私有(private)字段声明为 private[this] val/var blah 来强制它不为私有(private)字段提供 getter 和 setter,但我需要能够创建一个在编译时不生成 getter 和 setter 的公共(public)字段.

这在 Scala 中是否可行?

谢谢

最佳答案

如您提供的示例中所示,生成的类不包含 getter 或 setter。生成的类不包含 java bean getter 或 setter。真正让编译器生成getXsetX var 的方法您需要使用 @BeanProperty 注释该变量.

如果您想从 java 访问公共(public)字段,我认为您很不幸。至少,我还没有看到仅使用 scala 来实现这一目标的方法。

您可以通过混合 scala 和 java 来完成它。使用如下 java 类:

public abstract class JavaClassWithPublicField {
   public String name = "My name";
}

然后在您的 Scala 代码中继承该类:
class ScalaClassWithPubilcField extends JavaClassWithPublicField

这可能是最干净的方法。

关于Scala:我可以声明一个在编译时不会生成 getter 和 setter 的公共(public)字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10347384/

相关文章:

sql - SPARK : failure: `` union '' expected but ` (' found

scala - 为什么 'None' 会中断包含 'for' 的 'Option' 理解?

scala - 何时使用案例类或常规类

list - 将 Scala 列表转换为以索引为键的映射

scala - 如何跳过specs2中的 "should" block /片段?

scala - 将 Scala 可变参数转换为 Java 对象...可变参数

scala - Scala 中 println 的替代方案

scala - Spark 任务不可序列化

Scala lambda 函数与 map 函数

xml - 如何使用 Scala 创建 xhtml 查询字符串?