java - 声明匿名内部类

标签 java

rb.addActionListener(new ActionEvent(ae) {
   public void actionPerformed(ActionEvent ae) {
     nowCall(ae);
    }
});

另一种方式

Thread th=new Thread(Runnable r) {
  public void run() {
    // do something
  }
};

// notice the ending of above 2 snippets

看到这两个我真的很困惑,似乎没有确切的模式来声明一个匿名内部类。

请解释匿名内部类的语法。

最佳答案

据我所见和测试,第二个无效。

更常见的是创建一个新的 Runnable 实现:

Thread th=new Thread(new Runnable() {
  @Override
  public void run() {
    // This implements Runnable.run
  }
});

现在您可以覆盖普通线程的run方法:

Thread th=new Thread() {
  @Override
  public void run() {
    // This overrides Thread.run
  }
};

...但我个人更喜欢在创建线程时单独指定 Runnable

现在您在最后注意到的区别只是表达式是否用作参数(例如 addActionListener 方法或 Thread(Runnable) 构造函数,或者它是否只是直接分配给变量。将整个 new TypeName() { ... } 视为一个表达式,它只是以下之间的区别:

Thread th = expression;

Thread th = new Runnable(expression);

关于java - 声明匿名内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5511864/

相关文章:

Java 清理先前执行的套接字

java - 使用JPA执行数据库功能

java - 元音检查 - 数组越界错误

java - 为什么具体类的一个子类可以声明为抽象的,而父类的一些方法可以被重写并声明为抽象的?

java - ExecutorService 终止,但 JVM 没有

java - 如果任务在另一个类中运行,则停止计时器任务

Java JFreeChart DynamicTimeSeriesCollection。如何让 x 轴显示当前时间?

java - 如果不存在新的 Java DB,如何创建?

java - 在 Java 中永久保存数据(并自动加载)?

java - 如何在 JLabel 中显示 JTextField 的输入?如何修复反射错误?