我试图找出一种从 Scala 调用 Java API 的方法。基本上,有一个ContentValues
对象有几个方法,比如getAsString
, getAsLong
,每个方法都有自己不同的返回类型。
我可以包装ContentValues
另一个对象,以便我可以添加一个根据 Tget[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 _))
}