object Students { var name:String = null var age:Int = 0; }编译成class文件:
import scala.reflect.ScalaSignature;
public final class Students
{
static void age_$eq(int paramInt)
{
Students..MODULE$.age_$eq(paramInt);
}
public static int age()
{
return Students..MODULE$.age();
}
public static void name_$eq(String paramString)
{
Students..MODULE$.name_$eq(paramString);
}
public static String name()
{
return Students..MODULE$.name();
}
}
编译成熟悉的Java语言,看到一个Javabean出现了:age是get方法,age_$eq()是set方法。
再学生类里再添加一个val的身高属性:
object Students { var name:String = null var age:Int = 0; val hight:Double = 0.0; }编译后看到,val的hight属性只生成set方法:
public final class Students
{
public static double <span style="color:#ff0000;">hight</span>()
{
return Students..MODULE$.hight();
}
public static void age_$eq(int paramInt)
{
Students..MODULE$.age_$eq(paramInt);
}
public static int age()
{
return Students..MODULE$.age();
}
public static void name_$eq(String paramString)
{
Students..MODULE$.name_$eq(paramString);
}
public static String name()
{
return Students..MODULE$.name();
}
}
也可以自定义get/set方法:
object Students { var name:String = null; //set def name_=(name:String): Unit ={ this.name = name; } //get def name = name; }调用那么时,s.name=“john”这种方式进行赋值,调用者并不需要知道是其通过方法调用还是字段访问来进行操作的,这便是著名的统一访问原则。get方法也是直接调用。
如果将成员域定义为private[this],则不会生成getter、setter方法。
object Students { private[this] var name:String = "leo"; }编译后:
public final class Students
{
}
scala生成get/set方法的规则:
构造器