【问题标题】:Can an Arraylist of Custom Objects contain arraylists of other custom objects? [duplicate]自定义对象的数组列表可以包含其他自定义对象的数组列表吗? [复制]
【发布时间】:2017-11-24 16:22:40
【问题描述】:

自定义对象的数组列表可以包含其他自定义对象的数组列表吗?那将如何运作?

我试过了:

public class BankAccount {
    private String mTitle;
    private float mBalance;
    private ArrayList<sE> mHistory;

    public BankAccount(String title) {
        mTitle = title;
        mPrefFile = null;
        mBalance = 0;
        mHistory = new ArrayList<>();
    }

    public void changeBalance(float newBalance) {
        mBalance = newBalance;
    }

    public String getTitle() {
        return mTitle;
    }

    public String getPrefFile() {
        return mPrefFile;
    }

    public float getBalance() {
        return mBalance;
    }

    public ArrayList<sE> getHistoryArrayList() {
        return mHistory;
    }

    public void addToHistoryArrayList(String Title, Boolean IsEarning, float Amount) {
        mHistory.add(new sE(Title, IsEarning, Amount));
    }

    //sE stands for Spending/Earning
    public class sE {
        private String mTitle;
        private Boolean mIsEarning;
        private float mAmount;

        public sE(String Title, Boolean IsEarning, float Amount) {
            mTitle = Title;
            mIsEarning = IsEarning;
            mAmount = Amount;
        }

        public String getTitle() {
            return mTitle;
        }

        public Boolean getIsEarning() {
            return mIsEarning;
        }

        public float getAmount() {
            return mAmount;
        }
    }
}

但是当尝试将一个 sE 对象添加到历史数组时,它给了我一个错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.util.ArrayList.add(java.lang.Object)”

我该如何解决这个问题?感谢您的帮助!

【问题讨论】:

  • mHistory = new ArrayList() 在你可以添加对象之前。
  • 当您尝试向其添加新的 sE 对象时,表示 ArrayList 为空。这没有意义,因为您已经在构造函数中初始化了 ArrayList。您确定这是您的完整代码,并且没有更多内容吗? ArrayList 在您的代码中某处变为空。
  • 我有一个 BankAccount 对象的数组列表,我使用 gson 和 json 将其保存到 sharedpreferences 中。我加载并写入它并将arraylist保存在一个活动中,然后我想在一个活动中显示银行账户对象,您还可以在其中看到当前银行账户对象的sE(历史)Arraylist。
  • 您能否为此提供更多背景信息?当调用BankAccount.addToHistoryArrayList 时,它说mHistorynull。而且我们现在无法真正看到这是怎么可能的。可能正在使用getHistoryArrayList(),然后操纵您的ArrayList。这是我唯一可以看到发生任何奇怪事情的地方,因为变量被声明为private
  • 此外,您发布的有问题的代码不会产生您发布的 NullPointerException。您显然没有显示引发 NPE 的实际代码。

标签: java android arraylist custom-object


【解决方案1】:

上面发布的代码是正确的。您在构造函数中实例化新的 ArrayList,然后将新的 sE 添加到其中。没关系。但是当您尝试创建嵌套的 ArrayList 时,您必须为添加的每个元素创建新的 ArrayList 元素。

ArrayList<ArrayList<sE>> nestedList = new  ArrayList<>();

同时添加

nestedList.add(new ArrayList<>());

并使用添加一个元素

nestedList.get(0).add(new sE(...));

就是这样。

【讨论】:

  • OP 写入,将对象添加到历史记录时出错。为什么会出错?
  • 我必须在哪里编写这段代码? (在 BankAccount.java 类中或在活动中添加时)感谢您的帮助!
  • 在 BankAccount 类本身中。假设这是您的代码中嵌套 ArrayList 所在的位置。
  • 为什么arraylist必须嵌套?
  • 因为您问“自定义对象的 ArrayList 是否可以包含其他自定义对象的 ArrayList。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2018-07-10
  • 2019-01-04
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多