在同伴对象中定义或作为内部类
是否有一个(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
指针。