我正在查看一个类,该类负责从网站下载数据或如果下载失败则从本地数据库获取数据。

我的问题是因为在这种情况下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/

10-10 15:02