apply方法
伴生類和伴生對象的概念哗蜈,companion class和companion object
伴生對象里面前标,可以定義一個apply方法
直接調(diào)用類(參數(shù)),方式距潘,就相當于在調(diào)用apply方法
此時在apply方法中炼列,通常來說(也不一定),會創(chuàng)建一個伴生類的對象音比,返回回去
這種方式唯鸭,有一個好處,創(chuàng)建對象呢硅确,非常的方便
不要每次都是new 類(參數(shù))目溉,類(參數(shù))
提取器
就是unapply方法
和apply方法,顧名思義菱农,那就是反過來
apply方法缭付,可以理解為,接收一堆參數(shù)循未,然后返回一個對象
unapply方法陷猫,可以理解為,接收一個字符串的妖,解析成一個對象的各個字段
提取器就是一個包含了unapply方法的對象绣檬,跟apply方法正好相反
apply方法,是接收一堆參數(shù)嫂粟,然后構(gòu)造出來一個對象
unapply方法娇未,是接收一個字符串,然后解析出對象的屬性值
class Person(val name: String, val age: Int)
object Person {
def apply(name: String, age: Int) = new Person(name, age)
def unapply(str: String) = {
val splitIndex = str.indexOf(" ")
if (splitIndex == -1) None
else Some((str.substring(0, splitIndex), str.substring(splitIndex + 1)))
}
}
val Person(name, age) = "leo 25"
name
age
樣例類的提取器實戰(zhàn)詳解
scala中的樣例類星虹,說白了零抬,也很簡單
類似于java中的javabean
java中的JavaBean,包含了一堆屬性宽涌,field; 每個field都有一對getter和setter方法
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
scala中的樣例類平夜,默認就是提供apply方法和unapply方法的
case class Person(name: String, age: Int)
val p = Person("leo", 25)
p match {
case Person(name, age) => println(name + ": " + age)
}
只有一個參數(shù)的提取器
普通的提取器,相當于是,比如說卸亮,接收一個字符串忽妒,作為參數(shù),然后從字符串里面解析出來多個字段值,然后將多個字段值封裝在一個tuple中,作為Some類型的對象兼贸,返回
現(xiàn)在我們來想一下段直,如果你的類只有一個字段,字符串里面只有一個字段,解析出來的一個字段,是沒有辦法放在tuple中的寝受,因為scala中的tuple坷牛,規(guī)定了,必須要兩個以及兩個以上的值
這個時候很澄,在提取器京闰,unapply方法中,只能將一個字段值甩苛,封裝在Some對象中蹂楣,直接返回
class Person(val name: String)
object Person {
def unapply(input: String): Option[String] = Some(input)
}
val Person(name) = "leo"