在下面的代码中,是否可以在不使用 asInstanceOf 的情况下重新表述?我发现了一些应该避免使用 asInstanceOf/isInstanceOf 的样式指南建议,并且我设法清理了我的代码,除了如下所示的用法。
我确实找到了一个重复的问题 here ,但对于这个特定案例,它并没有真正帮助我,或者我只是一个初学者,无法将其转化为我自己的用例。
trait pet {}
class dog extends pet {
def bark: String = {
"WOOF"
}
}
def test(what: pet) : String =
{
what match {
case _:dog =>
val x = what.asInstanceOf[dog]
x.bark
}
}
test(new dog())
我试过例如:
val x = what : dog
但这似乎不起作用。
最佳答案
您可以只在 case 部分指定您期望的 dog
对象:
case x: dog => x.bark
但是现在如果将非狗对象传递给您的方法,您可能会收到 scala.MatchError
。因此,您需要添加具有如下理想行为的默认情况:
case _ => "unknown pet"
关于Scala 类型转换和避免 asInstanceOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27614854/