返回方法参数中指定的类型而不是AnyRef

时间:2016-02-19 08:10:35

标签: spring scala generics reflection

我有以下方法:

@org.springframework.stereotype.Service
class EntityCacheManager {
  def get(cacheId: String, entityClass: Class[_]): AnyRef = { ... }
  //...
}

所以要使用它,我必须写下这个:

val cachedEntity = entityCacheManager.get(cacheId, classOf[SomeEntity]).asInstanceOf[SomeEntity]

有没有办法让EntityCacheManager.get()返回类型为entityClass的实例,它在方法参数中指定?每次我使用这种方法时,我都希望避免使用asInstanceOf。我知道使用类型EntityCacheManager的泛型定义会很好,但它也是一个弹簧管理的bean,所以我认为使用泛型会带来麻烦。

1 个答案:

答案 0 :(得分:1)

您可以使用ClassTag类型类

来使用更惯用的scala方法
class EntityCacheManager {
  def get[T: ClassTag](cacheId: String): T = {
    val entityClass = implicitly[ClassTag[T]].runtimeClass
    val myObject: T = ??? // you retrieve your object somehow using entityClass
    myObject
  }
}

你现在可以像这样使用它:

val myEntityClassInstance = get[MyEntityClass]("key")