Scala中的抽象类和泛型

时间:2013-10-07 21:03:33

标签: scala

我正在尝试将用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] {

有人可以帮忙吗?

最诚挚的问候  马可

2 个答案:

答案 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]然后会自动解决。