从Java使用scala内部case类时的“期望的类或包”

时间:2016-04-27 21:13:59

标签: scala

我有一个类似于以下内容的scala类:

case class Foo(a: String) {
  case class Bar(b: String)
}

我尝试从java代码中调用它,如下所示:

Foo f = Foo.apply("foo");
Bar b = f.Bar.apply("bar");

我收到编译错误(在Intellij中),fBar b =语句中带有“{Expected class or package”消息的下划线。有谁知道这个问题是什么? Intellij甚至用自动完成建议上面的语法。

1 个答案:

答案 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");