這篇文章主要介紹“Scala的Bean屬性怎么使用”,在日常操作中,相信很多人在Scala的Bean屬性怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Scala的Bean屬性怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
站在用戶的角度思考問題,與客戶深入溝通,找到長(zhǎng)興網(wǎng)站設(shè)計(jì)與長(zhǎng)興網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋長(zhǎng)興地區(qū)。
一、類
class SimpleClass {
var value = 0
}
val c = new SimpleClass
上面定義了一個(gè)簡(jiǎn)單的類,看起來和java里面并沒有多大不同。這里還涉及到另一個(gè)問題,如果一個(gè)方法沒有參數(shù),后面的()是可要可不要的。
二、getter and setter
還是上面那個(gè)類,我們看一下它編譯出來的class文件長(zhǎng)什么樣子,value屬性變成了private的,而生成了2個(gè)方法,雖然跟java的get&set長(zhǎng)得不太一樣,但是其實(shí)性質(zhì)是一樣的。特殊之處在于, value_$eq ,這個(gè)$eq代表的是=,因?yàn)閖ava當(dāng)中=不能出現(xiàn)在方法名當(dāng)中,所以用 $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; }
}
這個(gè)時(shí)候,可以正常的訪問這個(gè)屬性
val c = new SimpleClass
c.value = 100
val tmp = c.value
三、只有g(shù)etter
val onlyget = 100
對(duì)應(yīng)的java代碼
private final int onlyget = 100;
public int onlyget() {
return this.onlyget;
}
四、對(duì)象私有
scala里面有private,這一點(diǎn)和java當(dāng)中的含義是相同的,不同的是,scala當(dāng)中還有private[this]。先看這段代碼,這樣的代碼是沒有問題的。
class SimpleClass {
private var value = 0
def < (that : SimpleClass) = this.value < that.value
}
如果改成下面的樣子,問題就出現(xiàn)了,that.value是無法編譯通過的。private[this]意味著僅對(duì)當(dāng)前對(duì)象,也就是this有效。
class SimpleClass {
private[this] var value = 0
def < (that : SimpleClass) = this.value < that.value
}
五、Bean屬性
我們還可以構(gòu)建更加java化的get和set,注意 import scala.beans.BeanProperty 是必須的
import scala.beans.BeanProperty
class SimpleClass {
@BeanProperty var value = 0
}
調(diào)用方法
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(); }
六、主構(gòu)造函數(shù)
首先是Scala代碼,Scala代碼的構(gòu)造函數(shù)和java相比更加緊湊,書寫更加簡(jiǎn)單
class SimpleClass(name : String) {
}
調(diào)用方法
val c = new SimpleClass("bajie")
java代碼
public class SimpleClass
{
public SimpleClass(String name)
{
}
}
這里有幾條規(guī)則,可以自己去進(jìn)行實(shí)驗(yàn)
1、如果構(gòu)造函數(shù)當(dāng)中的參數(shù),帶有val或var修飾符,它天然的被當(dāng)做類當(dāng)中的一個(gè)屬性,也會(huì)按照之前的規(guī)則來生成get和set方法
2、如果構(gòu)造函數(shù)當(dāng)中的參數(shù),沒有val和var修飾符,它僅僅是一個(gè)參數(shù),但是當(dāng)他在class當(dāng)中被至少一個(gè)方法使用的話,它將會(huì)升格為一個(gè)屬性。
七、從構(gòu)造函數(shù)
這里還有一個(gè)規(guī)則,每一個(gè)從構(gòu)造函數(shù),都必須以之前的某個(gè)從構(gòu)造函數(shù)或者是主構(gòu)造函數(shù)開始。換句話說,只有主構(gòu)造函數(shù)可以調(diào)用其父類的構(gòu)造函數(shù)。這一點(diǎn)是與java不同的。
class Person(name : String) {
var name = "";
var age = 0;
def this(name : String, age: Int){
this(name)
this.age = age
}
}
八、內(nèi)部類,與java的內(nèi)部類概念接近,這里不再贅述。
到此,關(guān)于“Scala的Bean屬性怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!