我有以下两种方法:
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/