[英]Is it possible to use generic method without passing the type in parameters in java
[英]Is it possible in Scala to use isAssignableFrom with type parameters?
我正在使用Jersey在Scala中实现JAX-RS服务。 我将对Json提供程序具有通用特征,并且我需要知道请求的Class是否受我的提供程序支持。 在Java中,由于类型擦除,在运行时无法知道类型参数的类。 但是有可能在斯卡拉做吗?
此代码不起作用:
trait JsonProvider[A] extends MessageBodyReader[A] with MessageBodyWriter[A] {
final def isReadable(t : Class[_],
genericType: Type,
annotations: Array[Annotation],
mediaType: MediaType): Boolean = {
t.isAssignableFrom(classOf[A]) && mediaType == MediaType.APPLICATION_JSON_TYPE
}
}
有什么建议吗? 在Java中,最好的方法是在Scala中也有一个受保护的抽象方法来返回A类。
有解决方法。 您可以使用Manifest
类型类。 通过使用它,Scala编译器将确保类信息在运行时可用。 Manifest
具有erasure
属性-这是泛型类型的类对象。
您可以将其用于方法的类型参数,如下所示:
def printClass[T](implicit ev: Manifest[T]) =
println(ev.erasure.getSimpleName)
或简化:
def printClass1[T: Manifest] =
println(manifest[T].erasure.getSimpleName)
您也可以将其用于类或抽象类:
class Printer[T: Manifest] {
def printName = println(manifest[T].erasure.getSimpleName)
}
不幸的是,您不能将其用于特征。
编辑:作为解决方法,您可以定义如下特征:
trait Printer[T] {
def printName(implicit ev: Manifest[T]) =
println(ev.erasure.getSimpleName)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.