java - 为什么使用匿名内部类,有哪些替代方案?

标签 java android event-handling anonymous-inner-class

我最近开始接触 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/

相关文章:

Java 默认方法比相同的代码慢,但在抽象类中

java - 如何知道 Java 类何时被引入标准 Java API?

android - 如何从 xml 设置 Android 字体

javascript - Jquery stopPropagation 不适用于复选框

java - 如何使用心跳?

android - 使用 ImageAdapter 以动态/编程方式使用 ImageView 填充 GridView

android - 如何删除 ksoap 中的命名空间声明?

android - 确定触摸输入消费者

c# - 如何用一种方法处理两个datagridviews错误?

java - compareTo 方法需要一些工作