我有一个抽象类(这是一个类似的例子)Printer
,它打印提供的参数,除非它未能通过过滤器。 Printer
与它的泛型类型是逆变的T
。
class Printer[-T] {
val filters: Seq[Function2[T => Boolean]]
def print(t: T): Unit {
if (filters.forall(_(t))) doPrint(t)
}
def doPrint(t: T): Unit
}
我现在有 20 个子类Printer
——一个用于字符串、整数等。由于Printer
是逆变的,filters
因此必须是val
. 但是,如果我想要一种Printer
添加过滤器的方法,它需要是不可变的。
def addFilter[TT <: T](t: TT): Printer[TT]
不幸的是,我现在需要在我的 20 个子类中的每一个中实现这个方法。有没有办法解决?
更新:另外,在 中addFilter
,我不知道如何返回子类而不是超类Printer
。例如,如果我调用addFilter
a StringPrinter
,理想情况下我会StringPrinter
恢复该类型。