java - 什么时候在非静态嵌套类上声明嵌套静态类是个好主意?

标签 java static-classes

我知道嵌套静态类的含义,但发现有时在决定何时在非静态嵌套类上声明它们会让人感到困惑。

主要是在实例化不是很好的情况下吗?

帮助您决定何时使用 static 修饰符的一般经验法则是什么?

最佳答案

这是一个非常有趣的问题。我会尽力向您解释。

A nested class is a member of its enclosing class. Non-static nested classes (inner classes) have access to other members of the enclosing class, even if they are declared private. Static nested classes do not have access to other members of the enclosing class.

基本上,静态嵌套类与其顶级类的实例成员交互,就像任何其他类一样。

因此,基本上您可以而且应该将静态嵌套类视为已嵌套在另一个顶级类中的顶级类,只是为了方便打包。

因此,每当您使用嵌套类时,首先将其设为静态,然后查看是否需要访问任何实例成员,从而有机会将其设为非静态。

以JDK为例,

public class LinkedList<E> ... {
...

 private static class Entry<E> { ... }

}

这里,Entry 是一个静态嵌套类,因为它被 LinkedList 使用,因此作为顶级类没有任何意义> 仅上课。而且由于它甚至不使用 LinkedList 类的任何成员,因此ma​​king is static 更有意义

关于java - 什么时候在非静态嵌套类上声明嵌套静态类是个好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38945225/

相关文章:

java - compareTo()==0 不工作

java - 私有(private)的嵌套类(内部或静态)是否可以具有可公共(public)访问的方法?

java - 为什么有时我必须将 @Test 放在单独的行中才能使其在 Eclipse 中工作

java - 如何使用Java URL和URL连接类打开网站

java - 使用TableRowJsonCoder将PubSub消息转换为BEAM中的TableRow

java - Java 静态类背后的概念

c# - 类静态成员的奇怪行为——这怎么可能?

c# - 静态类的扩展方法?

java - 从 Spring Data 中的多个表中进行选择