Non-public top-level class vs static nested class

前端 未结 4 1057
情书的邮戳
情书的邮戳 2020-12-14 09:29

It seems to me that non-public top-level classes and static nested classes essentially perform the same tasks when creating a helper class.


A.java


<
相关标签:
4条回答
  • 2020-12-14 09:35

    Nesting a class (statically in Java) sends a clear message of intent: the nested class AHelper is only relevant and usable to support A class. It has no meaning on its own, and this is immediately obvious.

    0 讨论(0)
  • 2020-12-14 09:44

    In neither example do you have one class per source file. But generally, you use a static nested class to signify that it is only intended to be used within its enclosing class (forcing it to be referenced as A.AHelper). That is not so clear if you move that class to the top level.

    From the Sun tutorial:

    Logical grouping of classes—If a class is useful to only one other class, then it is logical to embed it in that class and keep the two together. Nesting such "helper classes" makes their package more streamlined.

    0 讨论(0)
  • 2020-12-14 09:44

    One thing that comes to mind is the scope of the helper class. A nested class has access to private members of the parent class. If the helper is in its own file, you don't enjoy such access, although it is easy to handle with the default package visible scope.

    Another consideration is code reuse - you might want your helper to help several classes in your package.

    0 讨论(0)
  • 2020-12-14 09:58

    One difference is that a static nested class can be declared public. You cannot do this for any other class in the same file as the primary class as a public main level class must be the same name as the file name.

    So you could declare many public classes in one file, but only one of them being the main level. The other static nested classes ought to be related though to the main class or it really does not make sense to do that.

    0 讨论(0)
提交回复
热议问题