【问题标题】:Scala casting and avoiding asInstanceOfScala 强制转换和避免 asInstanceOf
【发布时间】:2014-12-23 14:01:28
【问题描述】:

在下面的代码中,是否可以在不使用 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

但这似乎不起作用。

【问题讨论】:

    标签: scala


    【解决方案1】:

    您可以在 case 部分指定您期望的 dog 对象:

    case x: dog => x.bark
    

    但是如果非狗对象将被传递给您的方法,现在您可能会收到scala.MatchError。因此,您需要添加具有理想行为的默认情况,如下所示:

    case _ => "unknown pet"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      相关资源
      最近更新 更多