当前位置: 首页 > 面试题库 >

Java中如何使用匿名内部类?

公羊信厚
2023-03-14
问题内容

Java中匿名类的用途是什么?我们可以说使用匿名类是Java的优势之一吗?


问题答案:

使用某些“额外”(例如覆盖方法)创建对象的实例时,匿名内部类会变得很有用,而不必实际继承一个类。

我倾向于将它用作附加事件侦听器的快捷方式:

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // do something
    }
});

使用此方法可以使编码更快一些,因为我不需要创建额外的类来实现ActionListener-我可以实例化一个匿名内部类而无需实际创建单独的类。

我仅将这种技术用于“快速而肮脏的”任务,在这些任务中使整个课程变得不必要。具有多个功能完全相同的匿名内部类应重构为实际类,无论是内部类还是单独的类。



 类似资料:
  • 问题内容: 有什么方法可以初始化Java中的匿名内部类吗? 例如: 有没有办法在类声明中的某处使用例如putValue方法? 问题答案: 使用初始化程序块: 初始化实例成员 通常,您需要将代码放在构造函数中以初始化实例变量。使用构造函数初始化实例变量有两种选择:初始化块和final方法。实例变量的初始化块看起来像静态初始化块,但没有static关键字: Java编译器将初始化程序块复制到每个构造函

  • 问题内容: 因此,当研究lambda表达式并用它们代替Java中的EventHandlers的匿名内部类时,我遇到了一些匿名内部类,这些使我停下来思考。例如,当为通常实现ActionListener的东西编写匿名内部类时,我们会编写 我对此感到困惑,因为ActionListener是一个接口,所以我认为有必要做类似的事情… 但这甚至无法编译。我想我这样做的原因显然是如果我们使用私有内部类,而使用

  • 问题内容: 如何在我的匿名内部子类中获取传递给此方法的值? 我收到此错误: 无法在以其他方法定义的内部类中引用非最终变量userID 我很确定我不能将其赋值为final,因为它是一个未知值的变量。我听说这种语法确实以某种方式保留了作用域,所以我认为必须有一个我不太了解的语法技巧。 问题答案: 当然,您可以将其分配为final-只需将该关键字放入参数的声明中即可: 我不确定这是一个未知值的变量是什么

  • 问题内容: 在我的某些项目和某些书中,据说最好 不要 使用内部类(不管是匿名与否,静态还是非静态),除非在某些受限制的条件下(例如s或s)。在我的第一个行业项目中,他们甚至被“禁止”。 这真的是最佳做法吗?为什么? (我不得不说我经常使用它们…) -编辑— 在所有这些答复中我都找不到一个正确的答案:大多数答复中都包含正确的部分:我仍将使用内部类,但我将尽量少使用它们! 问题答案: 在我看来,Jav

  • 问题内容: 我在另一个类()中有一个匿名内部类。 双方并返回空数组。 我在Javadocs中找不到关于此的一些提示。 可以使用反射以某种方式检索匿名内部类吗? 匿名内部类和普通内部类之间还有什么显着区别? 问题答案: 如果使用反射,那可能是一个非常糟糕的主意。抛开这些,我相信您可以在运行时添加其他内部类,因此列出可能尚未考虑的类没有意义。我想列出当前加载的类需要通过Java代理或类似的代理。 匿名

  • 问题内容: 我已经看到了几个与Java中类似的示例,希望有人可以解释发生了什么。似乎可以内联定义一个新类,这对我来说真的很奇怪。 第一行是预期的输出行,因为它只是toString。但是第二似乎函数可以内联重写。 为此有技术术语吗? 还是任何更深入的文档? 如果我有以下代码: 代码输出: 问题答案: 它是一个匿名内部类。您可以在Java文档内部类链接中找到有关它的更多信息。 编辑 我正在添加一个更好