想象一下,我有一个可以容纳某种动物的盒子。
可以给这个盒子提供原始数据,这些数据应该被转换/序列化成与盒子里已经存在的动物相同类型的动物。
换句话说,如果给一盒狗一些“数据”,我想验证“数据”是另一只狗。
trait Animal
trait Dog extends Animal
trait Cat extends Animal
class Box[T<:Animal](elems: List[T]) {
def receiveNewAnimal(data: String): T = validate[T](data)(<implicit val>)
}
通常,当我想针对特定动物验证“rawData”时,我会这样做(例如狗):
val getMyDog(data: String): Dog = validate[Dog](data)
但是,我不知道 Box[T] 拥有哪种类型的 Animal。
如果我让它保持原样:
def receiveNewAnimal(data: String): T = validate[T](data)(<implicit val>)
我收到一个编译错误,说我没有 T 类型的隐式(即使很难,我也拥有 Animal 的子特征的所有可能的隐式)。
看来我无法告诉编译器,我想根据当前 Box 包含的 Animal 类型验证数据。
- 为什么会这样?
- 可以解决吗?如何解决?