辅助类 - 在伴随对象中定义或作为内部类定义

时间:2015-12-29 21:39:02

标签: scala

是否存在(dis)优势(例如性能方面),用于在伴侣对象中定义辅助特征的类,而不是将其定义为 inner类?例如:

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

VS

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

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

我认为内部类在某处有一个不可见的Foo.this成员,但后来我的理解是Foo.Bar也不像Java那样纯粹是静态的,但可能有一些指向Foo$.this的指针也是。

0 个答案:

没有答案