JAVA-实例化Scala案例类
经过几天的搜索,我需要你的帮助来解决我的问题 我有一个java程序,我想调用一个用scala编写的库,jar在类路径中 Scala主类:JAVA-实例化Scala案例类,java,scala,class,case-class,scala-java-interop,Java,Scala,Class,Case Class,Scala Java Interop,经过几天的搜索,我需要你的帮助来解决我的问题 我有一个java程序,我想调用一个用scala编写的库,jar在类路径中 Scala主类: object Program{ def main(args: Array[String]): Unit = { ... } case class Config(param1, param2) { def parseProgramFromFiles(){} ... } } 我试图使用 Program.Config
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使用$delimiter来破坏这些名称。对于
例如,给定对象犬舍{class Dog}
内部类名
成为犬舍$Dog
因此尝试
new Program$Config("foo", "bar");
编辑:嗯……实际上它看起来像是
newprogram.Config(“foo”,“bar”)
给予
事实上,在我的机器上
package example
object Program {
case class Config(param1: String, param2: String)
}
然后
输出
Config(foo,bar)
感谢您的回复,Intellij无法解析符号程序$Config注意,通常在Scala中,您不会通过case类的构造函数构造case类的实例,而是通过调用伴随对象的apply
方法。在Java中,这大致类似于Program.Config$.apply(bla)
@JörgWMittagProgram.Config$.MODULE$.apply(“foo”,“bar”)
似乎有效。我可以通过更新库并在对象程序的名称example下添加包,并使用Program.Config Config=new Program.Config(“foo”,“bar”);来实例化case类Config代码>感谢您的有用回复。
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);
}
}