【问题标题】:Error with Maven/Scala: error: not found: type classOfMaven/Scala 出错:错误:未找到:类型 classOf
【发布时间】:2013-09-07 07:23:01
【问题描述】:

我有一个现有的 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

【问题讨论】:

    标签: scala maven


    【解决方案1】:

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

    class ScalaHibernateVolatilityDaoImpl(persistentClass : VolatilityImpl)
    

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

    【讨论】:

      【解决方案2】:

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

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

      请注意,您不需要任何构造函数参数,因此您不需要Class 类型。但仅供参考,Java Class 和 Scala Class 是直接对应的,所以如果您需要 Class&lt;?&gt;(或 Class&lt;? extends T&gt;)类型的变量,但在 Scala 中您只需编写 Class[_](或 Class[_ &lt;: T]) .

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

      【讨论】:

      • 谢谢,已经解决了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2016-08-09
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多