在Scala中声明val或var时,Scala会在编译为字节码时自动为您生成私有字段以及getter和setter.
例如
class myClass {
val name = "My Name"
}
Run Code Online (Sandbox Code Playgroud)
将编译以创建等效的
class myClass {
private string name;
public string name();
public void name_$eq(string);
}
Run Code Online (Sandbox Code Playgroud)
其中name()和name_ $ eq是私有字符串名称的getter和setter.
我知道你可以迫使它不声明为私人[这] VAL/VAR等等为私人领域的getter和setter方法,但我需要能够创建一个公共领域不会产生getter和setter在编译时.
这在Scala中甚至可能吗?
谢谢
生成的类不包含getter或setter,如您提供的示例中所示.生成的类不包含java bean getter或setter.要实际为编译器生成getX和setX方法,var您需要用它来注释该变量@BeanProperty.
如果您希望从java访问公共字段,我认为您遗憾的是运气不好.至少,我还没有看到只使用scala实现这一目标的方法.
你可以通过混合scala和java来实现它.使用java类:
public abstract class JavaClassWithPublicField {
public String name = "My name";
}
Run Code Online (Sandbox Code Playgroud)
然后在你的scala代码中继承该类:
class ScalaClassWithPubilcField extends JavaClassWithPublicField
Run Code Online (Sandbox Code Playgroud)
这可能是最干净的方式.