我正在尝试将用java编写的现有应用程序移动到scala,但我正在努力反对 这个特别的,。 在java中,我有以下抽象类:
public abstract class AbstractHibernateDao<T, ID extends Serializable> extends
HibernateDaoSupport implements GenericDao<T, ID> {
private final Class<? extends T> persistentClass;
public AbstractHibernateDao(Class<? extends T> persistentClass) {
this.persistentClass = persistentClass;
}
我试图在Scala中编写它,但我正在努力使用类型为Class
的变量persistentClass我尝试了以下但是它失败了很长时间
abstract class ScalaHibernateDao[T, ID <: Serializable](persistentClass <: T) extends
HibernateDaoSupport with GenericDao[T, ID] {
有人可以帮忙吗?
最诚挚的问候 马可答案 0 :(得分:0)
您需要在此处使用规范Class[_ <: T]
来匹配Java样式:
abstract class ScalaHibernateDao[T, ID <: Serializable](persistentClass: Class[_ <: T]) extends HibernateDaoSupport with GenericDao[T, ID] { ...
答案 1 :(得分:0)
我相信以下是习惯性的Scala方法:
abstract class ScalaHibernateDao[T: ClassTag, ID <: Serializable] extends HibernateDaoSupport with GenericDao[T, ID] {
private val persistentClass = classTag[T].runtimeClass
}
使用ClassTag
时,您不必手动传递Class[_]
实例,编译器会为您执行此操作:
class SomeEntityDao extends ScalaHibernateDao[SomeEntity, Long]
Class[SomeEntity]
然后会自动解决。