scala 伴生類和伴生物件的apply()問題
阿新 • • 發佈:2019-02-04
伴生類與伴生物件的定義:
單例物件與類同名時,這個單例物件被稱為這個類的伴生物件,而這個類被稱為這個單例物件的伴生類陣列原始碼例項:
伴生類和伴生物件是相互依存的,在我們呼叫陣列的時候,我們會發現我們有兩種初始化的模式:
模式一:
var z = new Array[String](3)
z(0) = "hadoop"; z(1) = "spark"; z(2) = "hive"
模式二:
var z = Array("Runoob", "Baidu", "Google")
模式二相對於模式一少了new這個類的過程,那麼為什麼會少這個過程?
我們可以先看一下原始碼:
def apply[T: ClassTag](xs: T*): Array[T] = {
val array = new Array[T](xs.length)
var i = 0
for (x <- xs.iterator) { array(i) = x; i += 1 }
array
}
這是原始碼之中關於Array陣列實現的一部分,大部分大家可能看不懂,但是我們可以看到第一行有一個new這個關鍵字,所以可以說是apply方法實現了對Array的例項化,才讓我們可以使用模式二,而這就是apply方法在半生類和伴生物件中的作用。
- 自制小例子
- 程式碼:
class object_test(){
println("hello class")
}
object object_test{
def apply(): object_test = new object_test()
println("hello object")
def main(args: Array[String]): Unit = {
var a=object_test()
}
}
- 執行結果:
hello object
hello class
Process finished with exit code 0
在程式碼中我們可以發現,apply()的作用就是返回伴生類的例項化。var a=object_test()
若澤大資料交流群:671914634