我经常遇到这个片段:
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);
}
});
}
现在这是什么? 构造函数中有方法!!我无法理解编写这些片段的方式。 解释得非常清楚
答案 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)
并让您的类实现一些接口。