构造函数中的方法?

时间:2011-03-17 14:00:27

标签: java inner-classes

我经常遇到这个片段:

invokeLater的一般形式是 - static void invokeLater(Runnable obj

但我经常遇到这些类型的代码:

{
    SwingUtilities.invokeLater(new Runnable() {
   public void run() {
     new tester();
   }
 });

}

或-----(另一种类型的例子)

{
   clean.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent ae) {
     cleanActionPerformed(ae);
   }
 });

}

现在这是什么? 构造函数中有方法!!我无法理解编写这些片段的方式。 解释得非常清楚

5 个答案:

答案 0 :(得分:3)

它们被称为匿名类,您可以在http://download.oracle.com/javase/tutorial/java/javaOO/innerclasses.html

上阅读它们

答案 1 :(得分:2)

他们是匿名课程。

可以将它们作为一个类写在自己的文件中,实例化它,并将其作为参数传递......但对于一次性使用,这是更简单的方法。< / p>

(正如Matt在下面的评论中指出的那样,&#34;更容易&#34;因为你不必创建文件并写出课程等)

答案 2 :(得分:1)

你看到的是匿名内部类。它们是一次性的课程,你不会在其他任何地方使用。

看一下这篇文章:

clean.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent ae) {
     cleanActionPerformed(ae);
   }
 });

addActionListener期待ActionListener的实现,这是一个接口。

现在,您可以编写一个实现它的全新类,然后将其实例作为addActionListener的参数,但如果您赢了,这种方式编写起来会更快(并且有点难以阅读)在其他地方使用这样的课程。

用这个可以达到同样的效果:

class SomeActionListener implements ActionListener {
   public void actionPerformed(ActionEvent ae) {
       cleanActionPerformed(ae);
   }
}

...

clean.addActionListener(new SomeActionListener());

答案 3 :(得分:0)

它被称为anonymous Inner class,其中对象被同时声明和初始化。

答案 4 :(得分:0)

这些只是匿名类或没有名称的本地类。当您只引用一次类时,通常会使用匿名类。

而不是执行addListener(this)并让您的类实现一些接口。

相关问题