0

我有一个现有的 Java 应用程序,我正在尝试迁移到 scala。我有一个像这样定义的抽象类

public abstract class AbstractHibernateDao<T, ID extends Serializable> extends
    HibernateDaoSupport implements GenericDao<T, ID> {

     private final Class<? extends T> persistentClass;

     // spring parts-----

     public AbstractHibernateDao(Class<? extends T> persistentClass) {
           this.persistentClass = persistentClass;
     }

构造函数接受 Class 类型的参数。然后我编写了一个扩展的 scala 类AbstractHibernateDao

package com.worldcorpservices.core.dao.shares.hibernate.scala {

import com.worldcorpservices.core.dao.AbstractHibernateDao
import com.worldcorpservices.core.dao.shares.VolatilityDao
import com.worldcorpservices.core.domain.shares.scala.Volatility
import com.worldcorpservices.core.domain.shares.scala.VolatilityId
import com.worldcorpservices.core.domain.shares.scala.VolatilityImpl
import java.util.List
import org.hibernate.criterion.DetachedCriteria
import org.hibernate.criterion.Order
import org.hibernate.criterion.Restrictions

class ScalaHibernateVolatilityDaoImpl(persistentClass : classTag[VolatilityImpl]) 
    extends AbstractHibernateDao[Volatility, VolatilityId](persistentClass)
    with VolatilityDao {

          ......

我使用 maven 构建我的应用程序,这是我的 pom.xml

<dependencies>
    <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-compiler</artifactId>
                <version>${scala.version}</version>
    </dependency>
    <dependency>
               <groupId>org.scala-lang</groupId>
               <artifactId>scala-library</artifactId>
               <version>${scala.version}</version>
        </dependency>
...

不知何故,当我跑步时,mvn scala:compile我收到了这个错误

[ERROR]  error: not found: type classTag

我尝试使用classOf,但得到完全相同的错误(not found:type classOf

4

2 回答 2

1

您正在尝试输入一个类对象(表示类的对象)作为类型标识符(类的标识符,在泛型类的情况下由其名称和泛型约束组成)。直接使用VolatilityImpl即可,即:

class ScalaHibernateVolatilityDaoImpl(persistentClass : VolatilityImpl)

顺便说一句,这与 Maven 无关。

于 2013-09-07T07:25:58.763 回答
0

如果我理解正确,您想扩展通用 DAO 来为您的班级获取 DAO。然后你必须写类似

class ScalaHibernateVolatilityDaoImpl
    extends AbstractHibernateDao[Volatility, VolatilityId](classOf[VolatilityImpl])
    with VolatilityDao

请注意,您不需要任何构造函数参数,因此您不需要Class类型。但仅供参考,JavaClass和 ScalaClass是直接对应的,所以如果你需要一个类型为Class<?>(or Class<? extends T>) 的变量,但在 Scala 中你只需编写Class[_](or Class[_ <: T])。

classOf[T]函数允许您获取类型参数的 Java 类。ClassTag是相关的,但不同的概念,除非您使用可感知的 API,否则您不需要它ClassTag,但这不是您的情况,因为您的 API 是在 Java 中的。

于 2013-09-07T09:09:45.330 回答