Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA-实例化Scala案例类_Java_Scala_Class_Case Class_Scala Java Interop - Fatal编程技术网

JAVA-实例化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

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

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

Scala主类:

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örgWMittag
Program.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);
    }
}