Java代码:
public class JavaJsonParser {
public static <T> T asObject(String json, Class<T> cls) {
System.out.println("# in java: " + json + ", cls: " + cls);
throw new RuntimeException("To be implemented");
}
}
Scala代码:
object ScalaJsonParser extends App {
def asObject[T: Manifest](json: String): Option[T] = {
Try(JavaJsonParser.asObject[T](json, classOf[T]).toOption
}
}
这样编译会报错:
Error:(8, 50) class type required but T found
Try(JavaJsonParser.asObject[T](json, classOf[T])).toOption
^
正确写法是:
object ScalaJsonParser {
def asObject[T: Manifest](json: String): Option[T] = {
Try(JavaJsonParser.asObject[T](json, implicitly[Manifest[T]].runtimeClass.asInstanceOf[Class[T]])).toOption
}
}
跑一个:
ScalaJsonParser.asObject[String]("{}")
将会打印出:
# in java: {}, cls: class java.lang.String