如果List(1,2,3)
转换为List.apply(1,2,3)
,那么为什么new Array[String](3)
不会转换为新的数组[String] .apply(3)?
我尝试过Array.apply(3),但语义与new Array[String](3)
不同。
答案 0 :(得分:3)
当您调用new Array[String](3)
时,您使用单个参数调用Array class上的Array构造函数:3。或者,当您调用Array(3)
时,您正在调用Array.apply(3)
上的apply方法{3}}。在Java中,这称为静态方法调用。它与调用{{1}}一样,正如您所期望的那样。
答案 1 :(得分:2)
使用new
意味着该机制不是函数应用程序,而是构造。代码“转换”为分配内存并调用构造函数。
答案 2 :(得分:1)
注意
之间的区别val a = new Array(3)
和
val a = Array(3)
第一个创建一个包含3个Array
元素的新null
对象;第二个创建一个新的Array对象,其中包含一个元素,即3。
Array(3)
转换为Array.apply(3)
,与List(3)
转换为List.apply(3)
的方式完全相同。