Scala использует искажение имени для кодирования различных Scala типов в Java пространства имен
Scala типы часто встречаются внутри значений объекта в виде формы пространства имен. Scala использует $ delimiter для искажения этих имен. Например, если 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)
.