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类可以访问外类的静态和非静态成员.
如果我理解正确,问题是private class与private static class。所有答案通常都是关于内部类的,并不是 100% 适用于该问题。所以首先要做的事情是:
正如所接受的响应所述,静态嵌套类与非静态嵌套类在访问外部类外部的方法/字段的方式和可能性上有所不同。但如果 A 类中存在私有类 B,则不会出现此问题,因为无论如何 B 都无法在 A 外部访问。
new A.B()现在,从类 A 内部,对于非静态字段/方法,您始终可以通过说或只是引用类 B,如果 B 是private class或private static classnew B(),这并不重要(没有编译/运行时错误)。如果是静态字段/方法,您需要使用私有静态类。
此外,如果你想从 B 内部访问 A 的非静态字段,那么你不能将 B 作为private static class。
我通常更喜欢private static class,除非我不能像前面的情况一样使用它,否则 intellij 会发出警告。