【发布时间】: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设置为null和id和customerid设置为0。您可能应该只删除该构造函数并始终使用正确初始化这些字段的其他构造函数。 -
或者
private List<OrderDetails> orderDetails = new ArrayList<>();,所以该字段默认初始化为非空值。 -
谢谢@dimo414,这是我没有做对的添加新的ArrayList()。我应该从中学习,只制作我使用的构造函数,并了解更多关于 Lists 和 ArrayLists 的知识。
-
只创建我使用的构造函数 - 确实是一个非常好的教训 :) 一般来说,除非你有具体的理由,否则不要创建 任何东西需要它。
标签: java list object arraylist nullpointerexception