我什么时候想让我的私有类静态?

His*_*His 57 java static private class

一般来说,将私有类声明为静态是否有任何好处?

在什么情况下我想使用以下哪一个而不是另一个?

private static class Foo
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

VS

private class Foo
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

Esk*_*nen 42

我认为这是一个很好的起点:http: //java67.blogspot.fi/2012/10/nested-class-java-static-vs-non-static-inner.html

1)嵌套静态类不需要引用外部类,但非静态嵌套类或内部类需要外部类引用.如果不创建Outer类的实例,则无法创建Inner类的实例.在使嵌套类静态或非静态时,这是最重要的考虑因素.

2)静态类实际上是类的静态成员,可以在静态上下文中使用,例如静态方法或外部类的静态块.

3)静态和非静态嵌套类之间的另一个区别是,您不能直接访问非静态成员,例如方法和字段到嵌套静态类.如果这样做,您将收到类似"非静态成员不能在静态上下文中使用"的错误.而Inner类可以访问外类的静态和非静态成员.

  • 它只能在嵌套类内部访问,而不能作为嵌套类私有的外部世界访问 (2认同)

ste*_*kis 5

如果我理解正确,问题是private classprivate static class。所有答案通常都是关于内部类的,并不是 100% 适用于该问题。所以首先要做的事情是:

来自geeksforgeeks

  • 嵌套类-> 另一个类中的一个类
  • 静态嵌套类-> 声明为静态的嵌套类称为静态嵌套类
  • 内部类-> 内部类是非静态嵌套类。

正如所接受的响应所述,静态嵌套类与非静态嵌套类在访问外部类外部的方法/字段的方式和可能性上有所不同。但如果 A 类中存在私有类 B,则不会出现此问题,因为无论如何 B 都无法在 A 外部访问。

new A.B()现在,从类 A 内部,对于非静态字段/方法,您始终可以通过说或只是引用类 B,如果 B 是private classprivate static classnew B(),这并不重要(没有编译/运行时错误)。如果是静态字段/方法,您需要使用私有静态类

此外,如果你想从 B 内部访问 A 的非静态字段,那么你不能将 B 作为private static class

我通常更喜欢private static class,除非我不能像前面的情况一样使用它,否则 intellij 会发出警告。


Jef*_*rey 4

如果需要访问封闭类的成员变量/方法,请使用非静态形式。如果不这样做,请使用静态形式。