我正在編寫一個函數以獲得來自JSONObject
的條目。由於它是JSON,因此輸入名稱的輸入可能存在或可能不存在,所以函數返回Option
,當Try
失敗時,或者如果值爲NULL
,則成功返回None
。該函數無法編譯和錯誤返回類型的錯誤。按預期方式推斷出的Scala選項類型
def tryGet[T](jsonObject: JSONObject, name: String): Option[T] = {
Try(jsonObject.get(name))
.map(x => if(JSONObject.NULL.equals(x)) None else x.asInstanceOf[T])
.toOption
}
錯誤:
Expression of type Option[Any] doesn't conform to expected type Option[T]
有人能告訴我,我做錯了什麼嗎?另外,這是解決問題的慣用方法嗎?
更新:
更改爲下面的工作
def tryGet[T](jsonObject: JSONObject, name: String): Option[T] = {
Try(jsonObject.get(name))
.filter(!JSONObject.NULL.equals(_))
.map(_.asInstanceOf[T])
.toOption
}
是的,我嘗試過了,它拋出「在線程異常‘主要’java.lang.ClassCastException:org.json.JSONObject $空不能轉換爲java.lang.String」,因爲它正試圖在運行時將一個null投射到String。 – broun
@broun你應該寫出你使用的是哪個json庫。我認爲你的json庫沒有返回null,而是返回非null對象org.json.JSONObject $ Null' – ymonad
是的,只是認爲它返回了一個自定義的NULL類型。我正在檢查java空,而不是 – broun