gpt4 book ai didi

JAVA - 实例化 Scala 案例类

转载 作者:行者123 更新时间:2023-12-01 14:13:56 24 4
gpt4 key购买 nike

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

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

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

程序在默认包中

谢谢

最佳答案

Scala 使用 name mangling将各种 Scala 类型编码到 Java namespace 中

Scala types are often found inside of object values as a form of namespacing. Scala uses a $ delimiter to mangle these names. For example, given object Kennel { class Dog } the inner class name would become Kennel$Dog.

因此尝试

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

编辑:嗯...实际上看起来new Program.Config("foo", "bar") should work作为

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)

关于JAVA - 实例化 Scala 案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61240749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com