在下面的例子中,我怎样才能使代码编译而不求助于myMethod
中的强制转换?
object Test {
sealed trait MyTrait
case class A(v: Int) extends MyTrait
case class B(v: Int) extends MyTrait
def myMethod[T <: MyTrait](in0: T): T = {
in0 match {
case in: A => in.copy(v = 1)
case in: B => in.copy(v = 2)
}
}
}
谢谢.
2条答案
按热度按时间xytpbqjk1#
您可以尝试:
identity
启动它in
值相同例如,您可以像这样实现它
它将使不匹配的类型错误消失。相反,你会得到警告,
这又可以用
@nowarn
来抑制。然而,老实说,在这种情况下,当我知道我比编译器更了解时-因为代码是微不足道的,一目了然,我也用测试来覆盖它-
.asInstanceOf
并没有那么糟糕。有时你无法避免它,所以最好创建一些小的,经过良好测试的实用程序,这将有助于处理编译器不那么聪明的所有情况。gfttwv5a2#
this one:
有another solution: