簡體   English   中英

Scala轉換並避免asInstanceOf

[英]Scala casting and avoiding asInstanceOf

在下面的代碼中,是否可以在不使用asInstanceOf的情況下重新表示? 我找到了一些樣式指南建議asInstanceOf / isInstanceOf應該避免,我設法清理我的代碼,除了下面顯示的用法。

我確實在這里找到了一個重復的問題,但它對這個特殊情況並沒有真正幫助我,或者我只是太初學者將它翻譯成我自己的用例。

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

但這似乎不起作用。

您可以在案例部分中指定您期望的dog對象:

case x: dog => x.bark

但是現在如果將非dog對象傳遞給您的方法,您可能會收到scala.MatchError 因此,您需要添加具有所需行為的默認情況,如下所示:

case _ => "unknown pet"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM