理解java中的事件侦听器
我是java新手,我仍在努力理解java语言,因此,如果这个问题听起来像是胡说八道,我很抱歉 我对侦听器有些不理解,有时您可以看到一个侦听器以这种方式声明:理解java中的事件侦听器,java,listener,inner-classes,Java,Listener,Inner Classes,我是java新手,我仍在努力理解java语言,因此,如果这个问题听起来像是胡说八道,我很抱歉 我对侦听器有些不理解,有时您可以看到一个侦听器以这种方式声明: private View.OnClickListener onSave=new View.OnClickListener() { public void onClick(View v) { // Some code } }; 或: 最让我困惑的是方法结尾后的分号和括号 我理解内部类是为了有多个监听器,但我不理解变量和方法的混
private View.OnClickListener onSave=new View.OnClickListener() {
public void onClick(View v) {
// Some code
}
};
或:
最让我困惑的是方法结尾后的分号和括号
我理解内部类是为了有多个监听器,但我不理解变量和方法的混合声明
它有什么目的
如何申报
WTF?:P
干杯:)这是一个好主意。这是一个非常常见和方便的构造。阅读我链接到的教程 把它分解
javax.swing.SwingUtilities.invokeLater(Runnable runnable);
invokeLater()
是SwingUtilities
上的一个静态方法,它将Runnable
作为参数
注意结尾处的右括号和分号;这只是一种标准方法,对吗
<>中间的东西只是创建一个可运行的新实例传递给该方法。如果我将其分配给参考,您会更好地识别它:
Runnable parameter = new Runnable()
{
public void run()
{
createAndShowGUI();
}
}
};
该代码适用于匿名类。搜索并阅读此主题 分号分别在方法调用时终止赋值
另外,我一直认为这个名字有误导性,因为你真正得到的是一个物体 我将尝试举例说明第二个例子 在这种情况下,invokeLater方法需要任何实现
Runnable
接口的对象
例如,这是在没有匿名类的情况下编写相同内容的另一种方法:
class Example implements Runnable{
public void run(){
// do something
}
}
你的例子可以是:
javax.swing.SwingUtilities.invokeLater(new Example());
但是由于这个示例类可能只使用一次,因此使用匿名类更方便。这里的分号或括号没有什么令人困惑的地方。基本上,这是在Java中分配匿名类的一种方法。如果您不习惯此构造,您当然可以创建自己的类来实现Runnable,并按如下方式分配它:-
public class YourRunnableClass implements Runnable {
public void run() {
...
}
}
javax.swing.SwingUtilities.invokeLater(new YourRunnableClass());
然后你可以让它看起来更好,像这样:-
public class YourRunnableClass implements Runnable {
public void run() {
...
}
}
javax.swing.SwingUtilities.invokeLater(new YourRunnableClass());
附言:尽量不要在帖子中使用“WTF”。) 通常,分别定义类、实例化实例和使用该实例:
class MyListener extends OnClickListener {
public void onClick(View v) {
// my onClick code goes here
}
}
MyListener foo = new MyListener();
button.setOnClickListener(foo);
但有时您需要一个只会立即实例化一次的子类,这通常是事件处理程序的情况。可以使用匿名(内部)类方便地定义和实例化它:
但是由于foo
只使用一次,我们可以进一步消除局部变量foo
,因此:
button.setOnClickListener(foo);
可以格式化为:
button.setOnClickListener(
foo
);
在foo
的值中替换:
button.setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
// my onClick code goes here
}
}
);
再次重新格式化,没有太多空白,以便像通常所写的那样查看:
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// my onClick code goes here
}
});
我认为最后一种格式有损可读性。我的匿名类的格式类似于倒数第二种格式——更好的可读性(IMHO)值一点额外的空白。您在内部类的末尾忘了一个分号,但在其他方面回答得不错!类似于[Java中如何使用匿名(内部)类?]()。如果您想查看匿名内部类的更详细描述,请查看以下内容: