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でそれを書こうとしていますが、クラス型の変数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
}

s を使用する場合、インスタンスを手動でClassTag渡す必要はありません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 に答える