Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过覆盖toString()只能打印ArrayList中的某些对象_Java_Oop_Object_Arraylist_Tostring - Fatal编程技术网

Java 通过覆盖toString()只能打印ArrayList中的某些对象

Java 通过覆盖toString()只能打印ArrayList中的某些对象,java,oop,object,arraylist,tostring,Java,Oop,Object,Arraylist,Tostring,我在覆盖toString()后打印出对象时遇到一些问题。在不重写toString()的情况下,我可以打印出对象引用而不会出现任何错误。但是,当我试图覆盖toString()方法时,我只能打印出一些输出(30个输出中的10个),而其他一些输出会给出错误 错误是: Exception in thread "main" java.lang.NullPointerException at Airline.toString(AirlineMain.java:277) at

我在覆盖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

航空公司类构造函数:

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;

     }
public SGTime(int hour, int min) {
          this.hour = hour;
          this.min = min;
      }
SGTime构造函数:

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;

     }
public SGTime(int hour, int min) {
          this.hour = hour;
          this.min = min;
      }
我对toString()的覆盖:

所有实例属性都定义了访问器。例如:

public String getFromCity (){
         return fromCity;
}
提前感谢您的指导

In

return getFromCity() +" "+ 
  getToCity()+" "+
  getDepartTime().getHour()+":"+
  getDepartTime().getMin()+" "+
  getArriveDay()+" "+
  getArriveTime().getHour()+":"+
  getArriveTime().getMin()+" "+
  getCost();
NPE的唯一可能原因是if
getDepartTime()
getArriveTime()
返回null

如果任何其他方法返回null,则通过JLS 15.18.1.1将其转换为文本字符串
“null”
。对于
getDepartTime
getArriveTime
您正试图调用一个方法,如果返回的引用为null,则将抛出一个NPE。

return getFromCity() +" "+ 
  getToCity()+" "+
  getDepartTime().getHour()+":"+
  getDepartTime().getMin()+" "+
  getArriveDay()+" "+
  getArriveTime().getHour()+":"+
  getArriveTime().getMin()+" "+
  getCost();
NPE的唯一可能原因是if
getDepartTime()
getArriveTime()
返回null


如果任何其他方法返回null,则通过JLS 15.18.1.1将其转换为文本字符串
“null”
。对于
getDepartTime
getArriveTime
,您正试图调用一个方法,如果返回的引用为null,则将抛出一个NPE。

不要重新发明轮子。我建议您使用著名的库,如ApacheCommonsToStringBuilder。如果使用
toString()
进行调试,那么也可以查看其子类
ReflectionStringBuilder
。它将通过几行代码来满足需求,例如:

@Override
toString() {
    if(!DEBUG_ON) {
       return super.toString();            
    }
     return ReflectionToStringBuilder.toString(this);
}

编辑:refelction(在深度对象图上)是一个缓慢的操作,使用时应小心。出于调试目的(在测试环境中)或一次性使用,它是可以的。

不要重新发明轮子。我建议您使用著名的库,如ApacheCommonsToStringBuilder。如果使用
toString()
进行调试,那么也可以查看其子类
ReflectionStringBuilder
。它将通过几行代码来满足需求,例如:

@Override
toString() {
    if(!DEBUG_ON) {
       return super.toString();            
    }
     return ReflectionToStringBuilder.toString(this);
}

编辑:refelction(在深度对象图上)是一个缓慢的操作,使用时应小心。用于调试目的(在测试环境中)或一次性使用都可以。

感谢您的及时回复!您的建议缩小了查找问题的范围。谢谢您的及时回复!你的建议缩小了发现问题的范围。