为什么在类中有公共静态类

2022-09-03 05:16:41

我正在浏览一些代码,我看到了这个:

public class A {
    public A(SomeObject obj) {
      //Do something
    }
    //Some stuff
  public static class B {
    //Some other stuff
  }
}

我想知道,因为即使是内部类也是为什么将其嵌套而不是单独的类?另外,我可以在这里这样做吗: ?我觉得这违背了静态类的目的,但我也看到了这个实现,所以想知道。publicnew A.B(SomeObject)


答案 1

我想知道,既然即使是内部类也是公共的,为什么它作为嵌套而不是一个单独的类?

这真的是一个问题,问问谁写了这门课。它可以允许外部类充当“迷你命名空间” - 如果嵌套类仅在外部类的上下文中有用,则似乎是合理的。它表示两个类之间故意紧密耦合。我最常在生成器模式的上下文中看到这一点:

Foo foo = new Foo.Builder().setBar(10).build();

在这里,对我来说,嵌套在里面而不是作为一个可能被称为的对等类是有道理的。Foo.BuilderFooFooBuilder

请注意,与不相关的类相比,它还提供了一些可见性差异。

另外,我可以在这里这样做吗: ?new A.B(SomeObject)

否,因为没有带参数的构造函数 - 只有(在您给出的示例中)。BSomeObjectA

我觉得这违背了静态类的目的

您应该尝试弄清楚您认为静态类的目的是什么,以及这以何种方式击败了该目的。目前,这种说法太模糊了,无法进行现实的讨论。


答案 2

你会有一个像这样的内部类,所以

  • 您可以保留一个仅存在以支持封装的外部类的类。
  • 您希望能够访问外部类或其他嵌套类的成员。private
  • 你想要一个具有静态字段的嵌套类(我知道的一个弱原因;)
  • 你有一个类,它有一个非常通用的名称,或者你不希望与同一包中的类使用的其他同名类混合。LockSync

我可以在这里这样做吗:新的A.B(某些对象)?

您可以。

我觉得这违背了静态类的目的

这需要习惯,但是一旦开始,您可能很难不将整个程序转换为一个文件.java ;)


推荐