4
我試圖找出從Scala調用Java API的方法。基本上,有一個ContentValues
對象有幾個方法,如getAsString
,getAsLong
,每個方法都有其自己的不同返回類型。在Scala中調用基於模板類型的方法
是否可以將ContentValues
包裝在另一個對象中,以便我可以添加一個get[T]
方法,該方法根據T調用正確的getAsXXX
方法?
我想什麼(沒有工作,抱怨曖昧含蓄分辨率):
object SContentValuesConversions {
case class SContentGetter[ScalaType](val check: String => Boolean, val getter: String => ScalaType) {
def getTyped(key: String): Option[ScalaType] = {
if (!check(key)) None
else Some(getter(key))
}
}
implicit def SIntContentValues(cv: ContentValues) =
SContentGetter((cv containsKey _), (cv getAsInteger _))
implicit def SLongContentValues(cv: ContentValues) =
SContentGetter((cv containsKey _), (cv getAsLong _))
implicit def SStringContentValues(cv: ContentValues) =
SContentGetter((cv containsKey _), (cv getAsString _))
}
非常感謝!我不確定爲什麼我的方式不起作用,但我會放棄它;) – 2013-04-06 11:22:44
好吧,你有三個無法區分的含義,增加了一個'getTyped'方法。編譯器沒有足夠的信息來從類似'c.getTyped(「x」)' – EECOLOR 2013-04-06 11:25:57
'的方法中選擇正確的信息啊,是的,所以參數化'getAsOpt'完成了這個技巧,並告訴編譯器足以區分這些轉換?有道理,我猜! – 2013-04-06 11:30:19