Java 地方课在实践中的运用
我们什么时候应该使用本地类?最佳实践方法 有可能使它们抽象或静态吗 是否有其他解决方案可以避免这些问题?来自: 如嵌套类一节所述,嵌套类使您能够 要对仅在一个位置使用的类进行逻辑分组,请增加 使用封装,创建更具可读性和可维护性的 代码。还包括本地类、匿名类和lambda表达式 传授这些优势;但是,它们的用途是: 更具体的情况: 本地类:如果需要创建一个类的多个实例、访问其构造函数或引入新的命名类型,请使用它 (例如,因为以后需要调用其他方法) 匿名类:如果需要声明字段或其他方法,请使用它 Lambda表达式:Java 地方课在实践中的运用,java,inner-classes,nested-class,Java,Inner Classes,Nested Class,我们什么时候应该使用本地类?最佳实践方法 有可能使它们抽象或静态吗 是否有其他解决方案可以避免这些问题?来自: 如嵌套类一节所述,嵌套类使您能够 要对仅在一个位置使用的类进行逻辑分组,请增加 使用封装,创建更具可读性和可维护性的 代码。还包括本地类、匿名类和lambda表达式 传授这些优势;但是,它们的用途是: 更具体的情况: 本地类:如果需要创建一个类的多个实例、访问其构造函数或引入新的命名类型,请使用它 (例如,因为以后需要调用其他方法) 匿名类:如果需要声明字段或其他方法,请使用它 Lam
- 如果要封装要传递给其他代码的单个行为单元,请使用它。例如,您可以使用lambda
表达式,如果希望对
一个集合,当一个进程完成时,或当一个进程
遇到错误 - 如果您需要一个简单的功能接口实例,且上述条件均不适用(例如,您不需要
构造函数、命名类型、字段或其他方法)
- 与本地类类似,您希望使该类型更广泛地可用,并且不需要访问本地类 变量或方法参数
- 如果需要访问封闭实例的非公共字段和方法,请使用非静态嵌套类(或内部类)。 如果不需要此访问,请使用静态嵌套类
也可以为了局部类的目的而阅读此内容。局部类很像局部变量。如果本地类仅在单个方法中有用,则可以创建该类 它们可以被声明为抽象的,但不能是静态的。正如您所料,静态方法中的本地类无法访问封闭类的非静态实例字段或方法 如果它们正确、干净地帮助您完成任务,那么就没有理由避免它们 我发现的一个用途是构建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文档: