0

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

有人可以帮忙吗?

向马可致以最诚挚的问候

4

2 回答 2

0

我相信以下是惯用的 Scala 方法:

abstract class ScalaHibernateDao[T: ClassTag, ID <: Serializable] extends HibernateDaoSupport with GenericDao[T, ID] {
  private val persistentClass = classTag[T].runtimeClass
}

使用ClassTags 时,您不必Class[_]手动传递实例,编译器将为您完成:

class SomeEntityDao extends ScalaHibernateDao[SomeEntity, Long]

Class[SomeEntity]然后会自动解决。

于 2013-10-08T08:14:09.817 回答
0

您需要使用Class[_ <: T]此处的规范来匹配 Java 样式:

abstract class ScalaHibernateDao[T, ID <: Serializable](persistentClass: Class[_ <: T]) extends HibernateDaoSupport with GenericDao[T, ID] { ...
于 2013-10-07T21:27:36.737 回答