我正在阅读Scala Blog for Mixin,但我从他们在帖子上使用的代码中看不到优势。首先他们只使用主要方法中的特征方法,所以我不明白他们为什么不能扩展这个特性:
object StringIteratorTest {
def main(args: Array[String]) {
class Iter extends StringIterator(args(0)) with RichIterator
val iter = new Iter
iter foreach println
}
}
我已尝试使用下面的代码,只是扩展特性使我能够访问特质和抽象类'方法。所以我的问题是:使用特征有什么好处?
object Mixin extends App {
class MixinTrait extends MixinAbstractClass{
def traitPrint = println("I'm the trait")
}
abstract class MixinAbstractClass {
def abstractPrint = println("I'm the abstract classs")
}
class MixinImplementation extends MixinTrait {}
val obj = new MixinImplementation()
obj.traitPrint
obj.abstractPrint
}
答案 0 :(得分:1)
假设StringIterator
是独立实施的。也许,它是某个库的成员,你想通过添加一些实用方法来“丰富”它。
由于这个原因你无法使StringIterator
扩展你的特性,它不能为你修改(当你不希望类直接扩展特性时的另一种常见情况,就像你的功能一样)添加仅对该类的某些应用程序有用,但不适用于其他应用程序)。
你可以反过来做,并使“富”特征扩展原始类,就像你在你的例子中所做的那样。这有效,但如果有多个呢? StringIterator
,IntIterator
,FileIterator
,MyIterator
,YourIterator
...那么你会扩展哪一个?