经过几天的搜索,我需要您的帮助来解决我的问题。
我有一个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:包程序不存在
程序在默认软件包中
谢谢
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] 删除。
我来说两句