这个Java构造是做什么的?
我对Java如此忍受我,如果这是一个可笑的简单问题,但我很好奇它有这个方法调用{}代码正在采取的 - 请参见下面的代码在方法addSelectionListener一个例子。这样做的目的是什么?我一直在寻找解释的文件,但似乎无法找到这种做法被称为不要介意任何有用的信息。这个Java构造是做什么的?
setStatusLine.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
String message = "I would like to say hello to you.";
if (pressed) {
message = "Thank you for using me";
}
setStatusLine(message);
pressed = !pressed;
}
});
感谢能够提供
这是一个Anonymous Class,或匿名内部类的任何帮助或见解。如果你是谷歌,你会发现一些tutorials /例子。太阳has some docs也是。
谢谢你们的帮助,非常感谢。 – BandyOrc 2010-04-21 09:24:25
没有实际上是一个方法调用... 此代码设置setStatusLine组件上的选择侦听器。
此代码的等效可能是
public class X implements SelectionListener{
//In the constructor or an other method.
setStatusLine.addSelectionListener(this);
public void widgetSelected(SelectionEvent e) {
String message = "I would like to say hello to you.";
if (pressed) {
message = "Thank you for using me";
}
setStatusLine(message);
pressed = !pressed;
}
}
方法addSelectionListener接收SelectionListener中实例。它不会收到“代码”。令人困惑的是使用新的<类/接口名称>(){...}。这种结构用于anonymous inner classes。实际上什么上面的代码没有被延伸的SelectionAdapter类,覆盖其widgetSelected方法,创造了新的类的一个实例,并将其传递给addSelectionListener()。
匿名内部类的使用与侦听器很常见,我们在这里创建一个新类,以用于某个特定的地方。因此我们不给它起一个名字,我们希望直接在使用它的上下文中实现它。
由于其他贡献者已经说了:这是一个匿名类
您可能已经创建了一个名为McClass.java新文件了名为MyClass一类新期待这样的:
class MyClass extends SelectionAdapter {
public void widgetSelected(SelectionEvent e) {
<your code that's being executed whenever the widget is being selected>
}
}
然后你可能已经改变了第一行这样的:
setStatusLine.addSelectionListener(新MyClass的());
请参阅?现在你只有一个“显式”类,只有一个函数。通常这会造成太多的开销,并且会让你的设计混乱。
这是否帮助?
我花了一些时间来了解匿名内部类。基本的事情要记住的是:
它们就像参数,除了传递一个基本类或对象,你传递一个类实现一个接口/扩展一个类(是的,他们也工作与接口)取决于方法参数。 它们是匿名的,所以在方法弹出堆栈后立即“消失”。 });对于一个匿名的内心阶层来说,这是一场死亡的弃权。 它们经常在用户界面中为侦听器事件弹出 它们可以节省代码中的混乱,但也会使其难以阅读。
对于全处罚读JLS:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.9.5
如果您有兴趣了解这些事情的细节问题,读取SCJP书和做考试是好还是可以学习JLS。它不会学习如何编写代码,但它可以帮助您了解Java以及其他许多OO语言如何工作。
匿名类再次罢工!不能真的责怪人们不能找到一些他们不知道的名字的参考... – 2010-04-21 09:14:38
“我新来的java如此裸露在我身边......” - 我敢打赌,你说所有的guys :-) – 2010-04-21 09:15:14
当我开始学习Java以及:)时,我挣扎于这些:) – Skurmedel 2010-04-21 09:17:59