问题描述
|
我是Scala的新手,在O'Reilly的《 Programming Scala》一书中,作者展示了一些实例化特征的代码。鉴于特征在某种程度上类似于Java中的接口(尽管我知道特征在字节码中作为类实现),实例化特征是什么意思,什么是合适的用例/设计模式?
例如。:
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
解决方法
我也是Scala的新手,但是我认为您上面的示例是创建一个新的匿名对象(就像您可以使用Java一样),然后将Trait附加到新的匿名类型上。
由于Scala特性可以包含实现代码,因此假设匿名类满足特性的任何要求(例如设置值或定义“抽象”方法),则基本上可以免费获得特性的行为。
因此,您在这里所做的不是直接实例化Trait,而是为Trait创建合适的对象以使其自身附加到它,以便您可以使用Trait的功能而无需定义扩展Trait的类。
这是否回答你的问题?