我有一个类似于以下内容的scala类:
case class Foo(a: String) {
case class Bar(b: String)
}
我尝试从java代码中调用它,如下所示:
Foo f = Foo.apply("foo");
Bar b = f.Bar.apply("bar");
我收到编译错误(在Intellij中),f
在Bar b =
语句中带有“{Expected class or package”消息的下划线。有谁知道这个问题是什么? Intellij甚至用自动完成建议上面的语法。
答案 0 :(得分:0)
由于Java序列化问题,您不应该在彼此内部定义案例类:https://github.com/alexandru/scala-best-practices/blob/v0.4/sections/2-language-rules.md#217-should-not-define-case-classes-nested-in-other-classes
我建议将它们拆分为同一个包中的单独案例类:
package flatclasses
case class Bar(b: String)
case class Foo(a: String)
然后更改Java代码:
Foo f = flatclasses.Foo.apply("foo");
Bar b = flatclasses.Bar.apply("bar");