JAVA-实例化Scala案例类

wmebrek:

经过几天的搜索,我需要您的帮助来解决我的问题。

我有一个Java程序,我想调用一个用Scala编写的库,该jar在classpath中。

Scala主类:

object Program{
  def main(args: Array[String]): Unit = {
    ...
  }

  case class Config(param1, param2) {

    def parseProgramFromFiles(){}
    ...

  }

}

我正在尝试使用实例化Config

Program.Config config = new Program.Config(param1, param2);

我收到此错误:java:包程序不存在

程序在默认软件包中

谢谢

马里奥·加里奇(Mario Galic):

Scala使用名称修饰将各种Scala类型编码为Java名称空间

Scala类型通常以命名空间的形式在对象值内找到。Scala使用$分隔符来修饰这些名称。例如,给定object Kennel { class Dog }的内部类名称将变为Kennel$Dog

因此尝试

new Program$Config("foo", "bar");

编辑:嗯......其实似乎new Program.Config("foo", "bar") 应该工作作为

javap -v Program$Config.class

InnerClasses:
     public static #11= #10 of #2; //Config=class Program$Config of class Program
     public static #14= #13 of #2; //Config$=class Program$Config$ of class Program

确实在我的机器上

package example

object Program {
  case class Config(param1: String, param2: String)
}

然后

package example;

public class Main {
    public static void main(String[] args) {
        Program.Config config = new Program.Config("foo", "bar");
        System.out.println(config);
    }
}

输出Config(foo,bar)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章