java - 通过覆盖 toString() 能够仅打印 ArrayList 中的部分对象

标签 java oop object arraylist tostring

我在覆盖 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"。对于 getDepartTimegetArriveTime,您尝试调用一个方法,如果返回的引用为 null,则会抛出 NPE。

关于java - 通过覆盖 toString() 能够仅打印 ArrayList 中的部分对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14826489/

相关文章:

java计算路径名差异

javascript - ES6,从父级构造函数中访问子级设置的 props

python - python中类、对象和方法的混淆

javascript - 使用动态计算的名称访问对象属性

ios - 从对象创建循环转换为在对象创建之间等待的 runBlock

java - Java 中的 GUI,带有用于实例变量的文本区域

java - HashMap 仅将循环中的最后一个值附加到 ListView

java - Android 许可证验证响应包含什么用户 ID?

oop - 多态性如何使我的代码更灵活?

java - 使用列表声明数组