我最近开始接触 Android,一直在查看有关内部类的示例,但不太明白它们的用途是什么。当制作听众并且不需要制作完整的类(class)时,经常使用它们,对吧?也许有人可以用外行的术语向我解释一下,在这种情况下使用内部匿名类的替代方案是什么? 这段代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
谢谢
最佳答案
一种替代模式是使容器类本身成为监听器。
public class MyClass implements View.OnClickListener {
@Override
public void onClick(View v) {
// Do something when button is clicked
}
public void initOrSomething() {
button.setOnClickListener(this);
}
}
但是,如果您有多个按钮需要表现不同,您可能会遇到麻烦。
另一种方法是为每个按钮设置不同的监听器类
public class Button1Listener implements View.OnClickListener {
@Override
public void onClick(View v) {
// Do something when button1 is clicked
}
}
public class Button2Listener implements View.OnClickListener {
@Override
public void onClick(View v) {
// Do something when button2 is clicked
}
}
button1.setOnClickListener(new Button1Listener());
button2.setOnClickListener(new Button2Listener());
匿名内部类只是第二种模式的更紧凑的表示。
编辑:两种模式的变体都是可能的,其中检查 View 对象的内容以确定单击了哪个按钮或将构造函数参数传递给监听器类以更改监听器行为等。
关于java - 为什么使用匿名内部类,有哪些替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417180/