Java 地方课在实践中的运用

Java 地方课在实践中的运用,java,inner-classes,nested-class,Java,Inner Classes,Nested Class,我们什么时候应该使用本地类?最佳实践方法 有可能使它们抽象或静态吗 是否有其他解决方案可以避免这些问题?来自: 如嵌套类一节所述,嵌套类使您能够 要对仅在一个位置使用的类进行逻辑分组,请增加 使用封装,创建更具可读性和可维护性的 代码。还包括本地类、匿名类和lambda表达式 传授这些优势;但是,它们的用途是: 更具体的情况: 本地类:如果需要创建一个类的多个实例、访问其构造函数或引入新的命名类型,请使用它 (例如,因为以后需要调用其他方法) 匿名类:如果需要声明字段或其他方法,请使用它 Lam

我们什么时候应该使用本地类?最佳实践方法

有可能使它们抽象或静态吗

是否有其他解决方案可以避免这些问题?

来自:

如嵌套类一节所述,嵌套类使您能够 要对仅在一个位置使用的类进行逻辑分组,请增加 使用封装,创建更具可读性和可维护性的 代码。还包括本地类、匿名类和lambda表达式 传授这些优势;但是,它们的用途是: 更具体的情况:

本地类:如果需要创建一个类的多个实例、访问其构造函数或引入新的命名类型,请使用它 (例如,因为以后需要调用其他方法)

匿名类:如果需要声明字段或其他方法,请使用它

Lambda表达式

  • 如果要封装要传递给其他代码的单个行为单元,请使用它。例如,您可以使用lambda
    表达式,如果希望对
    一个集合,当一个进程完成时,或当一个进程
    遇到错误
  • 如果您需要一个简单的功能接口实例,且上述条件均不适用(例如,您不需要
    构造函数、命名类型、字段或其他方法)
嵌套类:如果需要,请使用它

  • 与本地类类似,您希望使该类型更广泛地可用,并且不需要访问本地类 变量或方法参数

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

可以在方法体、for循环或if子句中定义本地类。它们类似于内部类,因为它们不能定义或声明任何静态成员

它们也是非静态的,因为它们可以访问封闭块的实例成员


也可以为了局部类的目的而阅读此内容。

局部类很像局部变量。如果本地类仅在单个方法中有用,则可以创建该类

它们可以被声明为抽象的,但不能是静态的。正如您所料,静态方法中的本地类无法访问封闭类的非静态实例字段或方法

如果它们正确、干净地帮助您完成任务,那么就没有理由避免它们

我发现的一个用途是构建Swing菜单栏层次结构:

private JMenuBar buildMenuBar() {

    class MenuAction extends AbstractAction {
        private static final long serialVersionUID = 1;

        @Override
        public void actionPerformed(ActionEvent event) {
            // Deliberately empty.
        }
    }

    Action fileMenuAction = new MenuAction();
    Action editMenuAction = new MenuAction();
    Action viewMenuAction = new MenuAction();
    Action helpMenuAction = new MenuAction();

    localizer.configure(fileMenuAction, "menu.file");
    localizer.configure(editMenuAction, "menu.edit");
    localizer.configure(viewMenuAction, "menu.view");
    localizer.configure(helpMenuAction, "menu.help");

    JMenu fileMenu = new JMenu(fileMenuAction);
    JMenu editMenu = new JMenu(editMenuAction);
    JMenu viewMenu = new JMenu(viewMenuAction);
    JMenu helpMenu = new JMenu(helpMenuAction);

    // etc.
}

没有其他方法需要MenuAction类,因此我将其设置为buildMenuBar方法的本地类。

本地类与嵌套类不同。本地类是在方法体中定义的类,因此只能在该方法中使用。@VGR能否提供更多详细信息?@MedbesJDK文档: