探索Scala(7)-- 字段
来源:互联网 发布:java入门书推荐 编辑:程序博客网 时间:2024/05/23 13:51
本文讨论一下在Scala语言里,字段(Fields)是如何实现的
字段实际上是getter/setter方法
在Scala里,字段是通过var或val关键字来定义的。var字段是可读写的,val字段是只读的。下面是一个简单的例子:
class MyObj { var intVar = 1 val strVal = "str"}反编译之后,可以得到下面的Java代码:
public class MyObj { private int intVar = 1; private final String strVal = "str"; public int intVar() {return intVar;} public void intVar_$eq(int intVar) {this.intVar = intVar;} public String strVal() {return strVal;}}可见:
- 对于var字段,Scala编译器会生成相应的Java字段和一对儿getter/setter方法
- 对于val字段,编译器会生成final字段和getter方法
- getter方法和字段同名
- setter方法为:字段名_$eq
抽象字段
因为字段实际上就是getter/setter方法,所以在Scala里,可以定义抽象字段(只要不赋初始值即可):
abstract class AbstractObj { var intVar: Int val strVal: String}反编译之后,得到下面Java代码:
public abstract class AbstractObj { public abstract int intVar(); public abstract void intVar_$eq(int intVar); public abstract String strVal();}
字段重写
只有val字段可以被override,如下所示:
class MySubObj extends MyObj { override val strVal = "substr"}反编译后,得到下面的Java代码:
public class MySubObj extends MyObj { private final String strVal = "substr"; @Override public String strVal() { return strVal; }}如果不想让val字段被子类重写,可以给字段加上final关键字:
class MyObj { var intVar = 1 final val strVal = "str"}
private字段
字段默认是public,但是即使改成private,Scala仍然会给字段生成getter/setter方法。如果字段只在对象内使用,可以把字段的访问级别设置成private[this],这样,字段的含义就跟Java一样了(而且拥有更小的可见范围--只有对象自己可见):
class ObjectPrivateFields { private[this] var intVar = 1 private[this] val strVal = "str"}
生成JavaBean风格Getter/Setter方法
如果想生成JavaBean风格的getter/setter方法,可以给字段打上@BeanProperty注解:
import scala.beans.BeanPropertyclass ScalaBean { @BeanProperty var intVar = 1 @BeanProperty val strVal = "str"}
参考资料
《Scala for the Impatient》
0 0
- 探索Scala(7)-- 字段
- 探索Scala(2)-- Traits
- 探索Scala(6)-- Tuples
- 探索Scala(8)-- 关键字
- 探索Scala(1)-- 运算符重载
- 探索Scala(3)-- 单例对象
- 探索Scala(4)-- Case Classes
- 探索Scala(5)-- 基本类型
- scala编程笔记(三)类,字段和方法
- scala基础15-抽象(类、字段、方法)
- Scala学习第7天 Scala类的属性和对象私有字段实战详解
- Scala学习回顾(六)---- Scala中的继承:超类的构造、重写字段、重写方法
- 学习Scala:Scala中的字段和方法
- scala中的对象私有字段
- Lucene的Version字段探索
- Scala/Java中的反射机制探索
- MongoDB基于scala语言的简单探索
- Scala 深入浅出实战经典 第7讲:Scala类的属性和对象私有字段实战详解
- 数字输出格式转换
- Jmeter测试结果分析
- jQuery操作HTML+CSS
- hdu 4089||2011年北京现场赛I题 概率dp(公式不好推)
- JAVA虚拟机内存设置
- 探索Scala(7)-- 字段
- system.currentTimeMillis()
- ubuntu下安装交叉编译工具链的方法总结
- [Struts2] 配置Struts2.3.16.3
- 开灯问题
- 性能测试项目
- 给B2C网站企业的一点建议
- java reference
- 推荐一系列优秀的Android开发源码