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

在Java中使用匿名类是否被认为是不好的样式?

宋丰
2023-03-14
问题内容

我知道匿名类在实现侦听器和类似内容时可以节省类型。他们试图替代闭包的某些用法。

但是社区如何看待这种语言功能的价值呢?它是否有意义,您是否定期使用它?它会使代码更清晰,更易理解和更可维护吗?还是匿名类使代码的可读性降低?

您的意见是什么,请方便地举一些例子/论据来支持您的意见?


问题答案:

我倾向于在不需要为完成某些任务而拥有完整类的情况下使用匿名内部类。例如,如果我想实现一个ActionListenerRunnable,但是我认为没有必要使用一个内部类。例如,Thread使用匿名内部类来启动simple
可能更容易理解:

public void someMethod()
{
    new Thread(new Runnable() {
        public void run()
        {
            // do stuff
        }
    }).start();
}

在某些情况下,例如上面的示例,它可以提高可读性,尤其是对于一次性任务,因为要执行的代码全部集中在一个位置。使用内部类将使代码“非本地化”:

public void someMethod()
{
    new Thread(new MyRunnable()).start();
}

// ... several methods down ... //

class MyRunnable implements Runnable
{
    public void run()
    {
        // do stuff
    }
}

就是说,但是,如果在某些情况下将要重复同一件事,那么它确实应该是一个单独的类,无论是常规类还是内部类。

我倾向于在程序中使用匿名内部类,这些类只是在尝试而不是将其作为实际应用程序的主要功能。



 类似资料:
  • 问题内容: 如果我理解正确 给出与以下结果相同的结果 所以我想它更优雅。 我似乎还记得在JavaScript代码中看到过这种短路分配语句。但是在Python中在赋值语句中使用短路是否被认为是好的样式? 问题答案: 这确实是一个意见问题,但在大多数情况下,答案是否定的。它与多种样式指南背道而驰,可能是因为人们倾向于认为它的意思是“如果a为真,则使用b的值,否则使用c的值”,而不是您发布的实际含义。

  • 问题内容: 我正在开发一个网页,在那里我为类似国际象棋的游戏布置一块面板,以及几个棋盘托盘。所有操作都使用HTML(使用jQuery在游戏进行时进行动态更新)完成。在某个地方,我想到在页面中使用元素的绝对定位被认为是不好的做法,并且最好使用相对定位。 经过相对定位的困扰了很长时间之后,我意识到板元件的绝对定位要容易得多,而且要正确得多。 有谁知道相对定位优于绝对定位的原因吗?在决定采用哪种方法时,

  • 我听到一些人说,即使在使用获得种子之后,使用也是很糟糕的。为什么会这样?我想知道事情是怎么发生的...抱歉,我又问了一个问题..但是,有什么办法可以替代这一点呢?

  • 问题内容: 我想知道Python是否具有类似C#匿名类功能的东西。为了澄清,这是一个示例C#代码段: 在Python中,我会想象这样的事情: 特定要求是能够在表达式上下文中创建具有指定字段的对象(例如,可在lambda和不允许使用语句的其他地方使用),而无需其他外部声明,并且能够通过普通成员按名称访问各个组件访问语法。创建的对象还应按 组件名称 (而不是像元组那样按位置)实现结构比较。 特别是:元

  • 我有一个问题,关于什么是正确的做法,使用SwingU实用程序的调用稍后方法。 所以首先,我想确认我理解正确。 据我所知,对GUI的更改必须在EDT上完成,因为Swing组件不是线程安全的。invokeLater方法将Runnable作为参数,该Runnable中包含的任何内容都将在EDT上运行。因此,对Swing组件的任何调用都被放入一种队列中,在EDT上一次执行一个。 有了这些,我的问题是:使用

  • 问题内容: 我问了一个一般性的Spring问题:自动播发Spring Bean,并让多个人回答说应尽可能避免调用Spring 。这是为什么? 我还应该如何访问配置了Spring创建的Bean? 我在非Web应用程序中使用Spring,并计划按照LiorH的描述访问共享对象。 修正案 我接受下面的答案,但这是Martin Fowler的另一种选择,他讨论了依赖注入与使用(本质上与调用相同)的优点。