2011-05-27 107 views
9

我是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} = [email protected] 

回答

17

我有理由新Scala的为好,但我认为你在上面正在创造一个新的匿名对象(比如,你可以使用Java做的),然后安装的例子将特质转换为新的匿名类型。假设匿名类满足Trait的任何要求(如设置了值或定义“抽象”方法),因为Scala Traits可以包含实现代码,因此基本上可以免费获得Trait的行为。

因此,您在此处所做的并不是直接实例化Trait,而是为Trait创建一个合适的对象,以便您可以使用Trait的功能,而无需定义扩展Trait的类。

这是否回答你的问题?

+1

是的,这使得很多的意义,谢谢! +1 – 2011-05-27 17:31:33