Maven / Scala出错:错误:找不到:输入classOf

时间:2013-09-07 07:23:01

标签: scala maven

我有一个现有的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类型的参数。 然后我写了一个扩展AbstractHibernateDao的scala类。

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

2 个答案:

答案 0 :(得分:1)

您正在尝试输入类对象(表示类的对象)作为类型标识符(类的标识符,包括其名称和泛型类的通用约束)。只需直接使用VolatilityImpl,即:

class ScalaHibernateVolatilityDaoImpl(persistentClass : VolatilityImpl)

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

答案 1 :(得分:0)

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

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

请注意,您不需要任何构造函数参数,因此您不需要Class类型。但仅仅是FYI,Java Class和Scala Class是直接对应的,所以如果你需要Class<?>(或Class<? extends T>)类型的变量,但在Scala中你只需要写{ {1}}(或Class[_])。

Class[_ <: T]函数允许您获取类型参数的Java类。 classOf[T]是相关的,但不同的概念,除非您使用ClassTag知道的API,否则您不需要,但由于您的API是Java,因此不是您的情况。