繁体   English   中英

JAVA - 实例化 Scala 案例 class

[英]JAVA - Instantiate Scala case class

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

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

Scala 主 class:

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: package程序不存在

程序默认为 package

谢谢

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

Scala 类型通常在 object 值中作为命名空间的一种形式出现。 Scala 使用 $ 分隔符来破坏这些名称。 例如,给定object Kennel { class Dog }内部 class 名称将变为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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM