我知道3种创建监听器的方法:
btn.addClickListener(new ButtonClickListener(){
doSomething();
})
btn.addClickListener(new MyButtonClickListener());
public MyButtonClickListener implements ButtonClickListener{}
所以同样如上,但在另一个班级。
如果我在课堂上有一些使用按钮的字段,我想用按钮做一些事情,这是最干净的方法吗?
例如,我将String a = "foo"
作为字段,当我点击按钮时,我想更改此字段。
MyClass.this.foo = "bar";
答案 0 :(得分:0)
Listener
与任何其他类一样;如果需要类的实例来操作另一个对象的字段,则将后者的引用作为构造函数的参数传递,并将其保存为对象字段之一。稍后,您可以使用引用对象的公共接口来根据需要对其进行操作。
另一种方法(将Listener
类稍微分开)是将所有相关字段移动到Listener
类,因此它的实例可以直接操作它们。每当您需要从实际使用Listener
(您创建它的类并将其附加到某个组件的类)的类中访问这些字段时,您可以使用它的公共接口从实例中检索它们。当然,您需要保存实例的引用,而不是仅仅将其添加为侦听器(就像您对案例1和2所做的那样)
答案 1 :(得分:0)
如果我在课堂上有一些使用按钮的字段,我想用按钮做一些事情,这是最干净的方法吗?
一般来说,这取决于。如果你看一下sun / oracle的java教程,你会看到他们也以不同的方式做这件事 甚至有4.可能性:通过GUI类实现接口。
根据我的经验,我会将可读性视为聪明。这意味着我会坚持一种方式并在所有情况下使用这种一致性。只有有一个真正好的论点,我才会考虑改变风格。每个读者都期待正在发生的事情,并期望得到满足。如果他们不得不开始四处搜寻或担心是否发生了其他事情(以及在哪里),那么阅读和理解就会变慢
这通常导致我的匿名内部课程。它们始终设置在addListeners()
方法中。我做了一些检查,如果必须做一些更严肃的操作,我会从监听器内调用一些其他(外部)类方法。
案例1(匿名内部类):我可以使用MyClass.this.foo =“bar”;
试试吧。 (是的,您甚至可以拨打电话foo = "bar";
)
案例2(内部类):相同
尝试(与匿名内部类相同)
案例3:? (参考该字段创建自定义构造函数?)
由于按值调用,这不起作用。 (MyButtonClickListener(String foo).. foo =“bar”仅更改本地foo)。您可以通过对该对象的引用传递并调用像setField这样的getter。