我正在寻求以下问题的帮助:
case class A(val name: String)
class B(name: String) extends A(name)
class Base[T <: A](param: T)
class SubClass[T <: B](param: T)
object Factory {
def create[T <: A](param: T) = {
param.name match {
case "something" => new Base(param)
case "something else" => new SubClass(param)
}
}
}
工厂不能编译,因为param子类期望(T:&lt; B)和创建中T的定义不匹配,其中T:&lt; A.是否有一个干净的解决方案或我是否需要向下调用Subclass构造函数?这个垂头丧气的样子怎么样?
为了清楚 - 当子类由param构造时,param确实是T&lt;:B。
感谢。
答案 0 :(得分:1)
为什么不先在param上匹配?
param match {
case b : B => ...
case a : A => ...
}
答案 1 :(得分:0)
如果提供type参数,则编译并运行OK:
case "something else" => new SubClass[T](param)
是否编译是否值得怀疑,因为如果匹配发生且ClassCastException
不是T
,它将在运行时给出B
。
清洁解决方案是按照Daniel所说的匹配类型。