这篇文章主要介绍“Scala的Bean属性怎么使用”,在日常操作中,相信很多人在Scala的Bean属性怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Scala的Bean属性怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、类
class SimpleClass {
var value = 0
}
val c = new SimpleClass
上面定义了一个简单的类,看起来和java里面并没有多大不同。这里还涉及到另一个问题,如果一个方法没有参数,后面的()是可要可不要的。
二、getter and setter
还是上面那个类,我们看一下它编译出来的class文件长什么样子,value属性变成了private的,而生成了2个方法,虽然跟java的get&set长得不太一样,但是其实性质是一样的。特殊之处在于, value_$eq ,这个$eq代表的是=,因为java当中=不能出现在方法名当中,所以用 $eq 代替。
public class SimpleClass
{
private int value = 0;
public int value() { return this.value; }
public void value_$eq(int x$1) { this.value = x$1; }
}
这个时候,可以正常的访问这个属性
val c = new SimpleClass
c.value = 100
val tmp = c.value
三、只有getter
val onlyget = 100
对应的java代码
private final int onlyget = 100;
public int onlyget() {
return this.onlyget;
}
四、对象私有
scala里面有private,这一点和java当中的含义是相同的,不同的是,scala当中还有private[this]。先看这段代码,这样的代码是没有问题的。
class SimpleClass {
private var value = 0
def < (that : SimpleClass) = this.value < that.value
}
如果改成下面的样子,问题就出现了,that.value是无法编译通过的。private[this]意味着仅对当前对象,也就是this有效。
class SimpleClass {
private[this] var value = 0
def < (that : SimpleClass) = this.value < that.value
}
五、Bean属性
我们还可以构建更加java化的get和set,注意 import scala.beans.BeanProperty 是必须的
import scala.beans.BeanProperty
class SimpleClass {
@BeanProperty var value = 0
}
调用方法
val c = new SimpleClass
c.getValue()
c.setValue(20)
c.value = 234
val tmp = c.value
java代码
private int value = 0;
public int value() { return this.value; }
public void value_$eq(int x$1) { this.value = x$1; }
public void setValue(int x$1) { this.value = x$1; }
public int getValue() { return value(); }
六、主构造函数
首先是Scala代码,Scala代码的构造函数和java相比更加紧凑,书写更加简单
class SimpleClass(name : String) {
}
调用方法
val c = new SimpleClass("bajie")
java代码
public class SimpleClass
{
public SimpleClass(String name)
{
}
}
这里有几条规则,可以自己去进行实验
1、如果构造函数当中的参数,带有val或var修饰符,它天然的被当做类当中的一个属性,也会按照之前的规则来生成get和set方法
2、如果构造函数当中的参数,没有val和var修饰符,它仅仅是一个参数,但是当他在class当中被至少一个方法使用的话,它将会升格为一个属性。
七、从构造函数
这里还有一个规则,每一个从构造函数,都必须以之前的某个从构造函数或者是主构造函数开始。换句话说,只有主构造函数可以调用其父类的构造函数。这一点是与java不同的。
class Person(name : String) {
var name = "";
var age = 0;
def this(name : String, age: Int){
this(name)
this.age = age
}
}
八、内部类,与java的内部类概念接近,这里不再赘述。
到此,关于“Scala的Bean属性怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注天达云网站,小编会继续努力为大家带来更多实用的文章!