【问题标题】:Getting NullPointerException when adding Objects to List [duplicate]将对象添加到列表时出现 NullPointerException [重复]
【发布时间】:2018-06-02 11:37:50
【问题描述】:

我非常需要帮助。在尝试了 4-5 个小时后,我认为我迷路了。我知道还有 2 个其他线程具有相同的标题,但没有帮助。 T.T

我不知道如何解决它,我现在快疯了。所以我希望有人可以帮助我解决这个问题。

如果有人可以帮我解决它并向我解释我到底做错了什么,这样我以后就不会再犯了,我会非常高兴。

我有 3 个类,我试图让 OrderMapper 中的 Main 函数创建一个购物车,也就是一个 CustomerOrder 对象。然后通过列表的添加函数将 OrderDetails 对象添加到它的列表中,但我不断收到 NullPointerException。

OrderDetails 类:

package model.domain;

public class OrderDetails {
    private int id;
    private int bookid;
    private int amount;

    public OrderDetails() {
    }

    public OrderDetails(int id, int bookid, int amount) {
        this.id = id;
        this.bookid = bookid;
        this.amount = amount;
    }

    public OrderDetails(int bookid, int amount) {
        this.bookid = bookid;
        this.amount = amount;
    }

    public int getId() {
        return id;
    }

    public int getBookid() {
        return bookid;
    }

    public void setBookid(int bookid) {
        this.bookid = bookid;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }

}

CustomerOrder 类:

package model.domain;

import java.util.Date;
import java.util.List;

public class CustomerOrder {
    private int id;
    private int customerid;
    private List<OrderDetails> orderDetails;

    public CustomerOrder() {
    }

    public CustomerOrder(int id, int customerid, List<OrderDetails> orderDetails) {
        this.id = id;
        this.customerid = customerid;
        this.orderDetails = orderDetails;
    }

    public CustomerOrder(int customerid, List<OrderDetails> orderDetails) {
        this.customerid = customerid;
        this.orderDetails = orderDetails;
    }

    public int getId() {
        return id;
    }

    public int getCustomerid() {
        return customerid;
    }

    public void setCustomer(int customerid) {
        this.customerid = customerid;
    }

    public List<OrderDetails> getOrderDetails() {
        return orderDetails;
    }

    public void setOrderDetails(List<OrderDetails> orderDetails, OrderDetails od) {
        orderDetails.add(od);
        this.orderDetails = orderDetails;
    }

    public void addDetails(int bookid, int amount){
        OrderDetails od = new OrderDetails(); 
        od.setBookid(bookid);
        od.setAmount(amount);
        this.orderDetails.add(od);
    }



//    public void addDetails(OrderDetails od){
//        this.orderDetails.add(od);
//    }


    //addOrderline /addDetails
    //
            //od.setOne(this.ono)
            //orderdetails.add(ad)

    //arraylist<orderdetail> getDetails(){
    //    return  orderDetails;
    //}

}

OrderMapper 类:

package model.domain;

import java.util.ArrayList;
import java.util.List;

public class OrderMapper {
    public CustomerOrder createShopcart(int customerid, List<OrderDetails> orderDetails){
        return (new CustomerOrder(customerid, orderDetails));
    }

    public static void main(String[] args) {
            OrderMapper om = new OrderMapper();

            OrderDetails ed = new OrderDetails(1, 2);

            //List<OrderDetails> orderDetails = null;
//         //   orderDetails = ed;
            //orderDetails.add(0, ed));

            CustomerOrder shopcart = new CustomerOrder();

            System.out.println(shopcart.getOrderDetails());

            shopcart.setCustomer(1);
            shopcart.addDetails(1, 3);
            shopcart.addDetails(3, 2);
            shopcart.addDetails(2, 2);

            System.out.println(shopcart.getOrderDetails());

//            CustomerOrder shopcart = om.createShopcart(1, null);
//            System.out.println(shopcart.getOrderDetails());   
//            OrderDetails od = new OrderDetails(1, 2);

//            shopcart.setOrderDetails(null, od);

//            System.out.println(shopcart.getOrderDetails());
//            shopcart.setCustomer(1);
//            shopcart.addDetails(1, 1);

    }

}

我得到的错误是,我知道第一个空值来自我设置的空值,但随后我添加它并得到 NullPointerException。我尝试了很多方法,但没有任何帮助:

null
Exception in thread "main" java.lang.NullPointerException
    at model.domain.CustomerOrder.addDetails(CustomerOrder.java:68)
    at model.dataaccess.OrderMapper.main(OrderMapper.java:155)

【问题讨论】:

  • 嗨,Blogbeard,我已经读过,但我仍然不知道哪里出错了。即使尝试了不同的东西,我似乎也无法修复我的代码。 :|
  • new CustomerOrder()orderDetails 设置为nullidcustomerid 设置为0。您可能应该只删除该构造函数并始终使用正确初始化这些字段的其他构造函数。
  • 或者private List&lt;OrderDetails&gt; orderDetails = new ArrayList&lt;&gt;();,所以该字段默认初始化为非空值。
  • 谢谢@dimo414,这是我没有做对的添加新的ArrayList()。我应该从中学习,只制作我使用的构造函数,并了解更多关于 Lists 和 ArrayLists 的知识。
  • 只创建我使用的构造函数 - 确实是一个非常好的教训 :) 一般来说,除非你有具体的理由,否则不要创建 任何东西需要它。

标签: java list object arraylist nullpointerexception


【解决方案1】:

你永远不会给你的对象一个列表......因此当你调用 shopcart.addDetails(1, 1);你会得到一个空指针异常,因为你的购物车对象永远不会被一个有效的列表对象实例化。

CustomerOrder shopcart = new CustomerOrder(); //no list given

尝试使用您创建的函数调用 createShopcart(int customerid, List orderDetails) 像这样

CustomerOrder shopcart = new CustomerOrder(0, new ArrayList<OrderDetails>());

【讨论】:

  • 嗨@RAH_Muh_Taz,非常感谢。这是语法和新手错误的混合。我确实尝试过 new ArrayList 但从未在最后添加 () 。它看起来很奇怪,我删除了它。谢谢你的协助。所以你说的是当我实例化我的购物车时,我应该记住有效的列表对象。以后不能添加到 CustomerOrder 对象吗?
  • 您可以稍后添加它,但您必须在其他方法中进行更多检查,以检查您的列表是否为 != null,这是额外不需要的工作。您的 CustomerOrder 包含一个列表作为其成员变量的一部分,最好在创建时给它一个列表以避免那些空指针异常。然后稍后您可以使用 anotehr 函数替换列表,但在创建时您要确保类中的所有内容都正确初始化
  • 酷,谢谢。看来我应该阅读更多关于这些东西的信息。这让我发疯了。在你们帮助我之后,我继续说没什么。我只希望我不要忘记这一课并记住它。再次感谢您的帮助。 :)
猜你喜欢
  • 2015-04-09
  • 2023-03-22
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多