为什么ConcurrentHashMap.Segment和ConcurrentHashMap.HashEntry类是静态的?

Vip*_*pin 5 java concurrency design-patterns

为什么ConcurrentHashMap.SegmentConcurrentHashMap.HashEntry类是静态的?为什么这样设计?

Ada*_*old 6

基本上所有不需要使用其封闭类的属性的内部类都应该是static.这来自java中的一般原则,它说每个对象都应该访问尽可能少的其他对象.


Vip*_*pin 1

@Andrey,@Adam 我同意你提出的观点,但我从有效的java书中得到了真正的答案。Item#22 优先考虑静态成员类而不是非静态成员类。

私有静态成员类的常见用途是表示由其封闭类表示的对象的组件。例如,考虑一个 Map 实例,它将键与值关联起来。许多 Map 实现对于映射中的每个键值对都有一个内部 Entry 对象。虽然每个条目都与映射相关联,但条目上的方法(getKey、getValue 和 setValue)不需要访问映射。因此,使用非静态成员类来表示条目是浪费的:私有静态成员类是最好的。

如果声明不需要访问封闭实例的成员类,请始终将 static 修饰符放在其声明中。如果省略此修饰符,每个实例都将具有对其封闭实例的无关引用

我从第 22 项中得到了更多好东西,但以上是要点。