Joh*_*ood 1 scala object apply
假设我们有以下定义:
scala> trait T
defined trait T
scala> object A extends T
defined module A
Run Code Online (Sandbox Code Playgroud)
然后我们可以用以下类型创建一个对象T:
scala> val t: T = A
t: T = A$@98b13b
Run Code Online (Sandbox Code Playgroud)
new这里没有使用关键字,因此这里使用了一种apply方法.但apply到目前为止我们还没有定义一个方法,所以我想apply这里使用的是默认方法?但它看起来像什么?
更新1:
分配A具有相同类型的变量时,将引发错误:
scala> val a: A = A
<console>:9: error: not found: type A
val a: A = A
^
Run Code Online (Sandbox Code Playgroud)
为什么同样的'技巧'在这里不起作用?有什么不同 ?
A是一个object,而不是一个class,因此你不需要创建它的实例 - 它基本上是一个单例.因此new不需要.apply不在这里开发.
它与case classes 有点不同:
case class C(x: Int)
val c = C(10)
Run Code Online (Sandbox Code Playgroud)
这个时间new运算符也没有被使用,但是创建了新对象 - 这次apply()涉及到了.基本上,当您创建一个case class伴随对象时,也会使用apply为您的方便而实现的方法创建(请参阅:使用构造函数,其中函数是预期的):
val c = C.apply(10)
Run Code Online (Sandbox Code Playgroud)