【问题标题】:Problem with creating java anonymous class with generics in scala在scala中使用泛型创建java匿名类的问题
【发布时间】:2010-09-22 03:39:17
【问题描述】:

例如我有以下 Java 接口

public interface Test<T,M> {
       public M get(T t);
}

如果我想用这个接口在 java 中创建 ananymoys 类

val t = new Test[Int,Boolean](){
     def get(t: Boolean) = 0
}

我有以下错误

Scala.scala:15: 错误: scal.test.example.Test 不采取 类型参数 val t = new Test[Int,Boolean](){

【问题讨论】:

    标签: java generics scala


    【解决方案1】:

    将您的 Scala 代码包含在一个对象中以进行单独编译并更正类型参数的顺序:

    object TestI {
        val t = new Test[Boolean,Int]() {
            def get(t: Boolean) = 0
        }
    }
    

    ...我没有收到任何编译错误。

    【讨论】:

    • 我试过这个并得到同样的错误。我使用 maven 编译 scala compile 插件,版本为 2.6.1 和 scala 2.8
    • 我怀疑您的 Java 接口与您的 Scala 类不在同一个包中,您未能导入该接口,Maven 没有先编译 Java,Java 生成的 .class 文件是'在 Scala 编译期间或它们的某种组合期间不在类路径中。
    • 这不是问题,因为以下代码可以正常工作 val t = new Test() { def get(t: Any) = null } 那是你的 scala 版本吗?
    • 我应该注意到您的诊断不是关于未定义的Test,而是关于以与其定义不一致的方式使用的Test
    【解决方案2】:

    这是 scala 2.6.1 的旧版本。默认情况下,它是从 maven archity 为 scala 项目安装的。现在我将版本升级到 2.8.0 并解决了问题。对于旧版本,您需要指定 java 的版本。

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多