匿名类与接口实现的编程约定

7

从安卓开发的角度来看,在编程时,您更喜欢使用哪种方式实现监听器?或者您认为哪种方式对于可读性最好?我给出了两个关于这些事情的例子,但是请考虑更复杂的类,例如具有多个监听器的类:)

第一个例子是匿名类:

public class SenderReceiverActivity extends Activity {

Button cancelButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sending);
    cancelButton = (Button) findViewById(R.id.button1);
    cancelButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

        }
    });
}}

第二个例子是实现接口的:

public class SenderReceiverActivity extends Activity implements OnClickListener {

Button cancelButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sending);
    cancelButton = (Button) findViewById(R.id.button1);
    cancelButton.setOnClickListener(this);
}

public void onClick(View v) {

}
}

2
http://stackoverflow.com/faq#dontask - Louis Wasserman
对于这个问题,你提问得很好,但是你应该知道在这个网站上已经有很多类似的问题了。 - user377628
3个回答

4
如果你只有一个按钮,那么第一种方法是正确的,因为你的代码中没有任何复杂度。但是当你有多个按钮时,第二种方法更清晰,只需一个onClick方法用于多个按钮,并使用v.getId()检查按钮的id。但是在功能上并没有任何变化,两种方式是相同的。

3

我认为第二种方法更好,因为:

1. 您可以在一个地方处理多个视图的点击事件...

2. 它可以使代码更短,易于阅读...

3. 维护也更容易。

4. 如果您的项目中使用了类似于“基础Activity”的概念,则它也非常有用。


1
此外,我认为在Activity中实现接口也可以一眼看出你对哪个监听器感兴趣。 - Omer Faruk Celebi

0

嗯,除了一个方面外,两者之间并没有太大的区别:在第二种情况下,您可以从类外访问onClick(View v)方法。

就我而言,我更喜欢第一种方法,因为很少有超过一个组件同时具有相同的单击行为。


我认为调用类似系统方法的方法不是一个好的实践(我在谈论Android情况)。如果你需要显式地调用这些方法,那么肯定有问题。不过,你的建议展示了另一种实现接口的方面。谢谢 :) - Omer Faruk Celebi
我并没有说我会这样做。我只是说有这种可能性 =] - joval

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接