Scala: Can I declare a public field that will not generate getters and setters when compiled?

后端 未结 2 773
陌清茗
陌清茗 2020-12-10 03:59

In Scala when you declare a val or a var, Scala will automatically generate a private field and the getters and setters for you when compiled to bytecode.

E.g.

2条回答
  •  醉梦人生
    2020-12-10 04:26

    The generated class does not contain getters or setters as can be seen in the sample you provided. The generated classes does not contain java bean getters or setters. To actually make the compiler generate getX and setX methods for a var you need to annotate that variable with @BeanProperty.

    If you would like to have a public field accessible from java I think you are out of luck unfortunately. Atleast, I have not seen a way to accomplish that only using scala.

    You could accomplish it by mixing scala and java. With a java class like:

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

    And then in your scala code inherit that class:

    class ScalaClassWithPubilcField extends JavaClassWithPublicField
    

    That's likely the cleanest way to do it.

提交回复
热议问题