我正在查看一个类,该类负责从网站下载数据或如果下载失败则从本地数据库获取数据。
我的问题是因为在这种情况下downloadListFromServer是一个异步调用,所以我们这样做很不好。listener= listener ;?因为可以在初始调用使用侦听器之前再次调用该方法。从本质上来说,在首次下载之前更改监听器中保存的引用可以使用它。
修改downloadListFromServer以接受侦听器并将其从getList传递过来会更好吗?
注意代码已剥离,因此即使看起来像我们在本例中也不想直接调用downloadListFromServer。
private MyListnernType listener;
public void getList(TextListType type, MyListnernType listener){
this.listener = listener; // is this bad?
downloadListFromServer(type); // uses
}
private void downloadListFromServer(final TextListType type){
Downloader.getTextList(type, new DownloadListener() {
@Override
public void downloadSucceeded( int statusCode, String response) {
listener.getTextListSucceeded(response);
}
});
}
};
最佳答案
是的,这是一个坏主意。侦听器应作为参数传递给第二个方法。
如果您的对象必须下载多个文件并始终警告同一侦听器,则可以将侦听器保留为一个字段是可以接受的。但是随后应将侦听器传递给对象的构造函数或setListener()
方法,这将使您清楚地知道,对于两个不同的消息,您不能传递两个不同的侦听器。
关于java - 实用程序类保存对接口(interface)的引用不好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22262133/