JAVA-实例化Scala案例类


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

我有一个java程序,我想调用一个用scala编写的库,jar在类路径中。

Scala主类:

object Program{
def main(args: Array[String]): Unit = {
...
}
case class Config(param1, param2) {
def parseProgramFromFiles(){}
...
}
}

我正在尝试使用实例化配置

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

我得到了这个错误:java:package程序不存在

程序处于默认包中

谢谢

Scala使用名称篡改将各种Scala类型编码到Java命名空间中

Scala类型通常以命名空间。Scala使用$分隔符来破坏这些名称。对于例如,给定object Kennel { class Dog },内部类名将变为CCD_ 2。

因此尝试

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

EDIT:嗯……实际上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);
}
}

输出CCD_ 4。

最新更新