我有一个扩展Trait的类,我想编写可以与类混合的Traits并覆盖一些方法 .
我 class 延伸的特征看起来像这样
trait CharSource {
def source: Iterator[Char]
def words: Iterator[String] = {
while(source.hasNext){
//Logic to get the next word from a Char Iterator
}
}
final def chars: Iterator[Char] = words.toString().toIterator
}
扩展CharSource的类
class IteratorDocumentSource(iterator: Iterator[Char]) extends CharSource {
def source = iterator
}
现在我想编写一个特性来覆盖IteratorDocutmentSource中的源def以获得一些特殊行为
trait PunctuationRemover extends Transformer {self: CharSource =>
override
/** Character source. Overriding should be in terms of `super.source` for
stackability. */
abstract val source: Iterator[Char] = {
super.source
//additional logic ...
}
}
PunctioationRemover扩展的变换器特性
trait Transformer {self: CharSource =>
protected def source: Iterator[Char]
def words: Iterator[String]
}
拨打此电话时出错
new IteratorDocumentSource("Hello World!".iterator) with PunctuationRemover
错误:
导致中止运行的异常或错误:SampleSuite $$ anonfun $ 2 $$ anon $ 3.document $ PunctuationRemover $$ super $ source()Lscala / collection / Iterator; java.lang.AbstractMethodError:SampleSuite $$ anonfun $ 2 $$ anon $ 3.document $ PunctuationRemover $$ super $ source()Lscala / collection / Iterator;
我引用了这篇文章,但我认为我的情况有点不同Can I override a scala class method with a method from a trait?