我知道创建监听器的 3 种方法:
1。匿名类型
btn.addClickListener(new ButtonClickListener(){
doSomething();
})
2。类内部类型
btn.addClickListener(new MyButtonClickListener());
public MyButtonClickListener implements ButtonClickListener{}
3。外部类
与上面相同,但在另一个类中。
问题
如果我在类中有一些使用按钮的字段,并且我想用按钮做一些事情,这是最简洁的方法?
例如,我有 String a = "foo"
作为字段,当我单击按钮时,我想更改此字段。
- 情况 1:我可以使用
MyClass.this.foo = "bar";
- 情况 2:相同。
- 案例 3:? (创建一个引用字段的自定义构造函数?)
最佳答案
If I have some fields in the class who use the button and I want to do something with buttons, which is the cleanest way?
一般来说,这取决于情况。如果您查看 sun/oracle 的 java 教程,您也会看到他们以不同的方式执行此操作。
甚至还有第四种可能性:通过GUI类实现接口(interface)。
根据我个人的经验,我认为可读性高于聪明性。这意味着我会坚持一种方法,并在所有情况下都使用这种一致的方法。只有真正有好的论据,我才会考虑改变风格。每个读者都对正在发生的事情抱有期望,并且期望得到实现。如果他们必须开始四处寻找或担心是否发生了其他事情(以及发生在哪里),这会使阅读和理解速度变慢。
这通常会导致我的匿名内部类。它们始终在 addListeners()
方法内设置。我做了一些检查,如果需要执行一些更严重的操作,我会从监听器内部调用一些其他(外部)类方法。
Case 1 (anonymous inner class): I can use MyClass.this.foo = "bar";
尝试一下。 (是的,你甚至可以调用 call foo = "bar";
)
Case 2 (inner class): the same
尝试一下(与匿名内部类相同的情况)
Case 3: ? (Create a custom constructor with reference to the field?)
由于按值调用,这将不起作用。 (MyButtonClickListener(String foo) .. foo = "bar"仅更改本地 foo)。您可以传递对对象的引用并调用像 setField 这样的 getter。
关于java - 在不同的类中实现 ButtonListener 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674505/