java - 为什么监听器有时注册到 "this",有时注册到匿名类?

标签 java android interface

当我阅读注册监听器的示例 Android 代码时,有时我会看到:

someService.registerListener(this);

在这种情况下,当前类被声明为 implements SomeListener并覆盖 SomeListener 中声明的 1 个或多个方法接口(interface),即稍后在当前类中,他们将声明:

@Override
public void someInterfaceMethod() {
    ...
}

其他时候我看到:

someService.registerListener(new SomeListener() {
    @Override
    public void someInterfaceMethod() {
        ...
    });

有理由选择一种方法而不是另一种吗?

最佳答案

这两个选项没有更好的选择,方法只需要一个符合接口(interface)契约的类(实现它的所有方法)。

当我试图不拥有太多匿名类,而是将它们组合在一起时,我会使用this

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btn1:
            doSomething;
            break;
        case R.id.btn2:
            doSomethingElse();
            break;
    }
}

通过在函数外部定义一些变量并将其分配给我的所有方法,我也可以在不使用外部类的情况下获得相同的功能。

private View.OnClickLisetner myClickListener = new View.OnClickListsner() {
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                doSomething;
                break;
            case R.id.btn2:
                doSomethingElse();
                break;
        }
    }
}

关于java - 为什么监听器有时注册到 "this",有时注册到匿名类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37364488/

相关文章:

java - 引用内部静态 Java 类时工具箱编译的奇怪行为

java - 在构建路径中包含其他项目时出现 NoClassDefFounderror

android - 如果满足某些条件,是否可以使用 firebase 创建自动推送通知,而无需网络?

.net - 为什么我创建的新 WPF Windows 不是从 Window 继承的?

java - 接口(interface)中的变量

java - JAVA中的隐式接口(interface)、类转换

java - 在运行时查找 java 类依赖项

Java如何在运行时创建多个jlist

java - RequestBody 未映射到对象

android - Kotlin - Android 中的自定义对话框