我正在尝试使用implicits实现模板方法模式。 A类是具有2个扩展的顶级类。
定义模板模式的A类,并有一些方法doSomething()。此方法内部使用了几个含义。这个类是抽象的。
B类和C类正在扩展A类,在范围内提供隐含,实现其他抽象方法并且不再抽象。
示例(使用喷雾管道):
A:
abstract class A[T <: Any : Manifest] {
....
abstract def method: PartialFunction[T,Unit] //not interesting
def doSomething() {
//method using implicit parser HttpResponse -> T
val responseFuture: Future[T] = pipeline(Get(url))
responseFuture.onSuccess(method)
}
}
B:
import CaseClassB._ //importing implicits that transfer HttpResponse -> CaseClassB
class B extends A[CaseClassB] {
def method: PartialFunction[CaseClassB,Unit] = {//not interesting}
}
此设置不起作用(由于“无法找到证据参数的隐含值”,因此编译A类失败)。有没有更好的方法来解决这个问题,而不需要像A类中的“隐式抽象def”那样需要重写?我不喜欢这个的原因是B级和C级使用进口提供隐含。