简体   繁体   中英

How do I alias the scala setter method 'myvar_$eq(myval)' to something more pleasing when in java?

I've been converting some code from java to scala lately trying to teach myself the language.

Suppose we have this scala class:

class Person() {
  var name:String = "joebob"
}

Now I want to access it from java so I can't use dot-notation like I would if I was in scala.

So I can get my var's contents by issuing:

person = Person.new();
System.out.println(person.name());

and set it via:

person = Person.new();
person.name_$eq("sallysue");
System.out.println(person.name());

This holds true cause our Person Class looks like this in javap:

Compiled from "Person.scala"
public class Person extends java.lang.Object implements scala.ScalaObject{
    public Person();
    public void name_$eq(java.lang.String);
    public java.lang.String name();
}

Yes, I could write my own getters/setters but I hate filling classes up with that and it doesn't make a ton of sense considering I already have them -- I just want to alias the _$eq method better. (This actually gets worse when you are dealing with stuff like antlr because then you have to escape it and it ends up looking like person.name_\\$eq("newname");

Note: I'd much rather have to put up with this rather than fill my classes with more setter methods.

So what would you do in this situation?

You can use Scala's bean property annotation:

class Person() {
  @scala.reflect.BeanProperty
  var name:String = "joebob"
}

That will generate getName and setName for you (useful if you need to interact with Java libraries that expect javabeans)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM