清除全局ArrayList也会清除另一个 [英] Clearing a global ArrayList clears an other too

查看:120
本文介绍了清除全局ArrayList也会清除另一个的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个非常奇怪的错误.

I have a really weird bug.

我正在编写一个通用类,在其中一种方法中,有一件奇怪的事.这里的类代码(不完全是):

I am programming a generic class and in one of its method, there is a strange thing. Here the class code (not completely):

public abstract class GenericFragment<M extends BaseModel, A extends BaseAdapter> extends HtmlFragment {

    private ArrayList<M> datas = new ArrayList<>();    
    private A adapter;

    protected abstract String getUrl();

    protected abstract A setAdapter();

    protected A getAdapter() {

        if(adapter == null) {
             adapter = setAdapter();
        }

        return adapter;
    }

    protected ArrayList<M> getDatas() {
        return datas;
    }

    protected void refreshData(ArrayList<M> datas) {

        Log.d("before glob", String.valueOf(this.datas.size()));
        Log.d("before loc", String.valueOf(datas.size()));

        this.datas.clear();

        Log.d("clear glob", String.valueOf(this.datas.size()));
        Log.d("clear loc", String.valueOf(datas.size()));

        this.datas.addAll(datas);

        Log.d("after glob", String.valueOf(this.datas.size()));
        Log.d("after loc", String.valueOf(datas.size()));

        getAdapter().notifyDataSetChanged();
    }
}

当我调用函数 refreshData()时,将清除全局 ArrayList ,但还会清除本地 ArrayList .这是日志:

And when I call the function refreshData() the global ArrayList is cleared but also the local ArrayList. Here are the logs:

D/niviel: before glob: 5
D/niviel: before loc: 5
D/niviel: clear glob: 0
D/niviel: clear loc: 0
D/niviel: after glob: 0
D/niviel: after loc: 0

我只想将本地数组克隆到全局数组.

I just want to clone the local array to the global array.

该函数在子类中调用.

requestData(activity, new requestDataCallback() {
    @Override
    public ArrayList<? extends BaseModel> parseDatas(Document document) {
        return RecordProvider.getRecord(activity, document);
    }

    @Override
    public void runOnUIThread(ArrayList<? extends BaseModel> datas) {

        refreshData((ArrayList<Record>) datas);
    }

});

推荐答案

好,我终于调试了我的代码.我注意到函数 refreshData()正在向全局ArrayList传递参数.

Ok I finally debugged my code. I noticed that the function refreshData() was passing in parameters the global ArrayList.

这篇关于清除全局ArrayList也会清除另一个的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆