在 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。真正让编译器生成getX
和 setX
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/