Scala将类类型作为参数传递

时间:2016-11-28 20:52:16

标签: scala function class parameters

嘿我想在scala中以最好的方式编写下面的代码,如果有更好的方法,请帮助我!

public final <T> T deserialize(String jsonString, Class<T> klass) {
    try {
        return objectMapper.readValue(jsonString, klass);
    } catch (Exception e) {
        LOG.error("Failed to deserialize {} to class {}, {}", jsonString, klass, e);
    }
    return null;
}

是不是很好?

  def deserialize[T: Manifest](value: String): T = {
    mapper.readValue(value, typeReference[T])
  }

1 个答案:

答案 0 :(得分:4)

如果您需要获取Class[T],请使用scala.reflect.ClassTag(不是TypeTag;您可以从中获取Class,但只能以圆周方式获取def deserialize[T](value: String)(implicit tag: ClassTag[T]): T = { mapper.readValue(value, tag.runtimeClass.asInstanceOf[Class[T]]) }

deserialize[String]("\"a\"")

小心不要忘记调用时的类型参数(例如deserialize("\"a\""),而不是Nothing),否则Scala会将其推断为deserialize[java.lang.Integer]("1")

你也可能需要传递盒装类而不是原语(例如{{1}}),如果是这样你可以修复问题,但这需要额外的代码。