1
我想在实现Modifier中包含实型不可变的Solution对象,但找不到避免downcast的方法。我怎样才能独立于解决方案类型编写Listener而不使它们具有类型参数?如何从执行其转换的不可变值类型中抽象出来?
以下代码说明,如果Listener不知道解决方案的具体类型,则downcasts是无法解除的。
trait Solution {} //Immutable abstact class
trait Listener(val modifier: Modifier) {
def onChange(iSolution: Solution): Solution
}
trait Modifier { //Implementations use different descendants of Solution
def addListener(listener: Listener)
def emptySolution: Solution
def transfrom1(iSolution: Solution): Solution //Downcast of argument can’t be avoided in implementations of these
def transfrom2(iSolution: Solution): Solution
}
class Listener1 extends Listener { //Should be independent from Solution concrete type. Current implentation meets this requirement by introducing downcasts in Modifier.
val modifier: Modifier
def onChange(iSolution: Solution) = modifier.transform1(modifier.transform2(iSolution)) // Some action involving solution transformations with modifier
}
你Listener1取决于类型的改性剂。你必须告诉你的监听器在构造上的类型基本上相当于有一个类型参数。 – Basilevs 2011-01-27 08:47:14