gpt4 book ai didi

java - 了解java中的事件监听器

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:50:53 24 4
gpt4 key购买 nike

我是 Java 的新手,我仍在努力理解这门语言,所以如果这个问题听起来有点菜鸟,我深表歉意。

对于监听器,我有一些不理解的地方,有时你会看到以这种方式声明的监听器:

    private View.OnClickListener onSave=new View.OnClickListener() {
public void onClick(View v) {

// Some code

}

};

或:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});

最让我困惑的是方法结束后的分号和括号。

我理解内部类是为了有多个监听器,但是我不理解这种变量和方法的混合声明。

它有什么用途?

它是如何声明的?

WTF? :P

干杯:)

最佳答案

通常定义一个类,实例化一个实例,然后使用该实例是分开完成的:

class MyListener extends OnClickListener {
public void onClick(View v) {
// my onClick code goes here
}
}

MyListener foo = new MyListener();

button.setOnClickListener(foo);

但有时您需要一个只立即实例化一次的子类,事件处理程序通常就是这种情况。使用匿名(内部)类定义它并一起实例化它很方便:

OnClickListener foo =
new OnClickListener() {
public void onClick(View v) {
// my onClick code goes here
}
};

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
}
});

我认为最后一种格式会影响可读性。我将匿名类的格式设置为类似于倒数第二个格式 - 更好的可读性(恕我直言)值得多留一些空白。

关于java - 了解java中的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4769128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com