哪个是在不同类中实现ButtonListeners的最佳方法?

时间:2013-02-03 16:15:04

标签: java

我知道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:? (参考该字段创建自定义构造函数?)

2 个答案:

答案 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。