我是Scala的新手,在O'Reilly的Programming Scala一书中,作者展示了一些实例化特征的代码。鉴于traits在某种程度上类似于Java中的接口(虽然我知道traits是作为字节代码中的类实现的),实例化一个特征意味着什么,以及适合的用例/设计模式是什么?
E.g:
scala> val x = new T1 with T2 { type z = String val v: z = "Z" }
x: java.lang.Object with T1 with T2{type z = String; def zv: this.z} = $anon$1@9d9347d
答案 0 :(得分:17)
我对Scala也是新手,但我认为你上面的例子是创建一个新的匿名对象(就像你可以用Java做的那样),然后将Trait附加到新的匿名类型。
由于Scala Traits可以包含实现代码,因此您基本上可以免费获得Trait的行为,假设匿名类满足Trait的任何要求(例如设置值或定义“抽象”方法)。
所以你在这里做的不是直接实例化Trait,而是为Trait创建一个合适的对象来附加自己,这样你就可以使用Trait的功能而无需定义扩展Trait的类。
这会回答你的问题吗?