在同伴对象中定义或作为内部类

是否有一个(dis)优势 (例如performance-wise)用于定义辅助对象的辅助对象,而不是将它们定义为内部类 ? 例如:

object Foo {
  final class Bar[A, B](val x: A, val y: B)
}
trait Foo[A, B] {
  def foo: Foo.Bar[A, B]
}

trait Foo[A, B] {
  final class Bar(val x: A, val y: B)
  def foo: Bar
}

我倾向于使用第一个变体 - 因为它不需要访问Foo任何成员 - 但由于类型参数变得多余,我正在考虑切换到第二个变体。 Class Bar仅在内部使用,因此可以获得protected修饰符。

我认为内部类有一个隐形的Foo.this成员,但是我的理解是Foo.Bar也不像Java Foo.Bar是纯静态的,但可能有一些指向Foo$.this指针。

链接地址: http://www.djcxy.com/p/76529.html

上一篇: define in companion object or as inner class

下一篇: scala: reflection on an inner class of abstract type