何时在 Java 中对帮助程序类使用内部类

2022-08-31 13:10:05

例如,如果我有一个类和一个帮助器类来完成它的一些功能,那么将其作为内部类是否有意义。

    public class Foo {
       private FooHelper helper;

       // constructor & any other logic

       public void doSomeThing() {
         helper.do();
       }
    }

    public class FooHelper {
        public void do() {
         // code
        }
    }

在上面的情况下,将 作为内部类有意义吗?道歉,如果这听起来很愚蠢,但我对用例有点困惑。FooHelper


答案 1

是的,让它成为一个内部类是完全有意义的。如果没有其他类需要它,请将其设为私有。如果它不需要对外部类的成员进行独占访问,请使其成为静态嵌套类,因为这样它将需要较少的内存空间。

查看官方教程中的推荐 -

如果您需要访问封闭实例的非公共字段和方法,请使用非静态嵌套类(或内部类)。如果不需要此访问权限,请使用静态嵌套类。


答案 2

来自 JAVA SE Docs

为什么使用嵌套类?

这是一种对仅在一个位置使用的类进行逻辑分组的方法:如果一个类只对另一个类有用,那么将其嵌入到该类中并将两者保持在一起是合乎逻辑的。嵌套这样的“帮助程序类”会使其包更加简化。

它增加了封装:考虑两个顶级类 A 和 B,其中 B 需要访问原本会被声明为私有的 A 成员。通过将类 B 隐藏在类 A 中,可以将 A 的成员声明为私有,并且 B 可以访问它们。此外,B本身可以隐藏在外界之外。

它可以带来更具可读性和可维护性的代码:在顶级类中嵌套小类会使代码更接近其使用位置。

所以,是的,使用FooHelper作为内部类是有意义的。


推荐