我有一个现有的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
)
答案 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,因此不是您的情况。