2012-12-17 37 views
1

如何異常捕獲的代碼與Java使用攔截轉換爲Scala的向前參考超值異常的定義擴展」?編譯器錯誤,而Java異常代碼轉換爲使用攔截階:'

從閱讀http://www.scalatest.org/getting_started_with_fun_suite它似乎被推薦捕獲異常時要使用攔截。在異常捕獲代碼下面我需要訪問異常類型,以便在 斷言內,以檢查它的類型:

catch { 
      case me : MyException => { 
      assert(me.getDetail.getClass() === classOf[GenericException]); 
      } 
     } 

這似乎並不使用攔截如下代碼會導致一個編譯器錯誤是可能的:「前進參考值以上的異常」

在這裏的定義延伸在轉換爲階catch塊:

 val exception = intercept[MyException] { 
assert(exception.getDetail.getClass() === classOf[GenericException]); 
    } 

上線上發生錯誤

assert(exception.getDetail.getClass() === classOf[GenericException]); 

回答

1

嗯,你的exception定義是循環的。你想要的是:

val exception = intercept[MyException] { 
    <your exception-throwing code here> 
} 

assert(exception.getDetail.getClass() === classOf[GenericException]) 
+0

感謝,這工作。因爲如果拋出異常,代碼正在執行,這是一個閉包還是其他一些阻塞名稱?我從來沒有見過以這種方式聲明的val – user701254

+0

不,這只是一個正常的方法,其中大括號之間的代碼塊是參數。參數周圍的Parens可以省略,如果它是一個代碼塊,它允許你這樣的好語法。如果您想進一步瞭解,請查看「攔截」的來源。 –