开发者

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

开发者 https://www.devze.com 2022-12-22 23:14 出处:网络
I\'ve been converting some code from java to scala lately trying to teach myself the language. Suppose we have this scala cla开发者_如何学JAVAss:

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

Suppose we have this scala cla开发者_如何学JAVAss:

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)

0

精彩评论

暂无评论...
验证码 换一张
取 消