说我有一个基本抽象类和2个扩展它的案例类。
sealed abstract class Base extends Product with Serializable
case class A(d: String) extends Base
case class B(d: Int) extends Base
例如,我在A
和B
上也有一个类型类
trait Show[T] {
def show(t: T): String
}
object Show {
def apply[T](t: T)(implicit show: Show[T]): String = show.show(t)
implicit val showA: Show[A] = new Show[A] {
def show(t: A): String = "A"
}
implicit val showB: Show[B] = new Show[B] {
def show(t: B): String = "B"
}
}
我的问题是,在我的代码中,我从反序列化中获得了A
和B
,它们的类型为Base
。在这种情况下,scala无法解析类型类,因为Base
上没有定义类型类。
我可以通过在Base
上定义实例并进行模式匹配来解决此问题,但是IMO这样最好不要使用类型类。
我们有什么技巧可以使scala解析基类的类型类? 谢谢。
答案 0 :(得分:1)
不,没有这样的把戏。类型必须是静态已知的,因为解析类型类实例的是编译器。
正如您所说,必须创建Base
的实例,它将解析正确的实例。可以手动完成,但可能会有更好的方法。也许有人可以为如何做得更好提供更好的答案,但是从根本上来说,Base
的实例是必需的。