我想定义一个可以比较两种类类型的函数。我定义了两个不同的类:
abstract class Task
case class DefinedTask(id: Long) extends Task
case class EmptyTask() extends Task
然后我有一个返回类型对象的函数Task,它可以是DefinedTask或EmptyTask。
现在,我想做的是有一个函数来识别这个对象是 aDefinedTask还是只是一个EmptyTask. 问题很简单,我会使用模式匹配。但我想概括它,因为多个类都采用这种Defined/Empty模式。
到目前为止我尝试的是:
def makeReturned[T: Manifest, U: Manifest](obj: T)(u: U)(f: T => Value) =
if(manifest[U] equals manifest[T]) f(obj) else
throw new IllegalArgumentException()
}
//call to it
makeReturned(task)(DefinedTask)(makeTask)
U总是DefinedTask,T可能是DefinedTask or EmptyTask,但它返回为Task.
manifest[U].erasure.toString //"class DefinedTask$"
manifest[T].erasure.toString //"class Task"
从编译器的角度来看这是正确的,但它不适合我。所以,我的问题是我怎样才能以一种能给我想要的方式比较它们?