据我了解,在斯卡拉性状类似,只是方法是允许有一个实现用Java接口。 此外,相比于Scala类,你不能为其传递参数进行施工。
到现在为止还挺好。 但我为什么允许实例化它们? 说真的,我没有看到一个很好的理由,让这一点。
据我了解,在斯卡拉性状类似,只是方法是允许有一个实现用Java接口。 此外,相比于Scala类,你不能为其传递参数进行施工。
到现在为止还挺好。 但我为什么允许实例化它们? 说真的,我没有看到一个很好的理由,让这一点。
你真的不实例化它们。 当你画了与Java并行,让我们进一步走进去。 您可以在Java中建立一个匿名类出一个抽象类或接口。 这几乎是Scala中是相同的:
scala> trait A
defined trait A
scala> new A {}
res0: A = $anon$1@5736ab79
请注意,当您创建一个从特质对象的大括号是强制性的 。 例如,冯不能做:
scala> new A
<console>:9: error: trait A is abstract; cannot be instantiated
new A
^
虽然这将完全适用于A类:
scala> class B
defined class B
scala> new B
res2: B = B@213526b0
当然,如果你的特质一些元素没有实现,你需要在创建对象,以实现它们:
scala> trait C {def foo: Int}
defined trait C
scala> new C {}
<console>:9: error: object creation impossible, since method foo in trait C of type => Int is not defined
new C {}
^
scala> new C {def foo = 42}
res4: C = $anon$1@744957c7