JAVA - 实例化 Scala 案例 class
JAVA - Instantiate Scala case class
经过几天的搜索,我需要你的帮助来解决我的问题。
我有一个 java 程序,我想调用一个用 scala 编写的库,jar 在 classpath 中。
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:程序包程序不存在
程序在默认包中
谢谢
Scala 使用 name mangling 将各种 Scala 类型编码到 Java 命名空间中
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")
好像
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 编写的库,jar 在 classpath 中。
Scala 主程序class:
object Program{
def main(args: Array[String]): Unit = {
...
}
case class Config(param1, param2) {
def parseProgramFromFiles(){}
...
}
}
我正在尝试使用
实例化 ConfigProgram.Config config = new Program.Config(param1, param2);
我得到这个错误:java:程序包程序不存在
程序在默认包中
谢谢
Scala 使用 name mangling 将各种 Scala 类型编码到 Java 命名空间中
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 becomeKennel$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)
.