java接口(interface)类型作为方法参数 - 如何将两种方法合二为一

标签 java android

我有以下两种方法:

public void informAllFragmentsWhenDatabaseStatusChanged () {
    for (int i=0; i<mainActivityPageAdapter.getCount(); i++) {
        if (mainActivityPageAdapter.getFragment(i) instanceof InterfaceMainDatabaseStatusChanged)
            ((InterfaceMainDatabaseStatusChanged) mainActivityPageAdapter.getFragment(i)).onMainDatabaseStatusChanged();
    };

}

public void informAllFragmentsWhenListStatusChanged () {
    for (int i=0; i<mainActivityPageAdapter.getCount(); i++) {
        if (mainActivityPageAdapter.getFragment(i) instanceof InterfaceListStatusChanged)
            ((InterfaceListStatusChanged) mainActivityPageAdapter.getFragment(i)).onListStatusChanged();
    };

}

请注意,每一个都是在不同的时刻执行的。

如您所见,这两种方法的主要部分是相同的。 instanceof 使用的接口(interface)名称和在对象上执行的方法有什么不同。

问题是如何以优雅的方式将这两种方法合二为一。

我在想类似的事情:

public void informAllFragments (InterfaceType interface);

有什么建议吗?

最佳答案

private void informAllFragments (){
PagerAdapter mainActivityPageAdapter = null; // assign a valid PageAdapter here

   for (int i=0; i<mainActivityPageAdapter.getCount(); i++) {
        if (InterfaceListStatusChanged.class.isAssignableFrom(mainActivityPageAdapter.getFragment(i).getClass())){
            ((InterfaceListStatusChanged) mainActivityPageAdapter.getFragment(i)).onMainDatabaseStatusChanged();
        }else if (InterfaceMainDatabaseStatusChanged.class.isAssignableFrom(mainActivityPageAdapter.getFragment(i).getClass())){
            ((InterfaceMainDatabaseStatusChanged) mainActivityPageAdapter.getFragment(i)).onListStatusChanged();
        }
    };

}

您还可以将相同的 if/else 结构与“instanceof”一起使用。您的代码不能变得更短,因为您调用了不同的方法。

关于java接口(interface)类型作为方法参数 - 如何将两种方法合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19815035/

相关文章:

java.lang.NumberFormatException : For Input string "" - When using scanner to read txt file

java - Java中的HTML实体解码: apostrophe

android - 自定义线性布局android中的多项选择问题

android - 如何从数据库获取项目的值并将其设置为微调器值

android - 启动 Android 默认网络浏览器后处理返回点击

java - 如何在java中输入两个名字之间有空格

java - 如何在 Spring Boot 中验证 JSON 请求?

java - Firebase android Task<T> 成功后不返回任何内容

android - android 管理大量位图的有效方法

java - 图片上传 android Java + Asp.net (C#)