Scala的Bean属性怎么使用
更新:HHH   时间:2023-1-7


这篇文章主要介绍“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属性怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注天达云网站,小编会继续努力为大家带来更多实用的文章!

返回云计算教程...