我在覆盖 toString() 后打印对象时遇到一些问题。在不覆盖 toString() 的情况下,我可以打印出对象引用而不会出现任何错误。然而,当我尝试覆盖 toString() 方法时,我只能打印出一些输出(30 个输出中的~10 个),而其他一些则给出错误。
错误是:
Exception in thread "main" java.lang.NullPointerException
at Airline.toString(AirlineMain.java:277)
at java.lang.String.valueOf(String.java:2902)
at java.io.PrintStream.println(PrintStream.java:821)
at AirlineMain.main(AirlineMain.java:432)
基本上我有一个名为“Airline”的类,并且正在创建对象并将其存储到 ArrayList<Airline>
中.
Airline 类构造函数:
public Airline(String fromCity, String toCity, SGTime departTime,
int arriveDay, SGTime arriveTime, int cost) {
this.fromCity = fromCity;
this.toCity = toCity;
this.departTime = departTime;
this.arriveDay = arriveDay;
this.arriveTime = arriveTime;
this.cost = cost;
}
SGTime 构造函数:
public SGTime(int hour, int min) {
this.hour = hour;
this.min = min;
}
我对 toString() 的重写:
public String toString() {
return getFromCity() +" "+ getToCity()+" "+getDepartTime().getHour()+":"+getDepartTime().getMin()+" "+getArriveDay()+" "+getArriveTime().getHour()+":"+getArriveTime().getMin()+" "+getCost();
}
所有实例属性都定义了访问器。示例:
public String getFromCity (){
return fromCity;
}
预先感谢您的指导!
最佳答案
在
return getFromCity() +" "+
getToCity()+" "+
getDepartTime().getHour()+":"+
getDepartTime().getMin()+" "+
getArriveDay()+" "+
getArriveTime().getHour()+":"+
getArriveTime().getMin()+" "+
getCost();
NPE 的唯一可能原因是 getDepartTime()
或 getArriveTime()
返回 null。
如果任何其他方法返回 null,则根据 JLS 15.18.1.1,它们将转换为文字字符串 "null"
。对于 getDepartTime
和 getArriveTime
,您尝试调用一个方法,如果返回的引用为 null,则会抛出 NPE。
关于java - 通过覆盖 toString() 能够仅打印 ArrayList 中的部分对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14826489/