我有以下方法:
@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,所以我认为使用泛型会带来麻烦。
答案 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")