Java 通过覆盖toString()只能打印ArrayList中的某些对象
我在覆盖toString()后打印出对象时遇到一些问题。在不重写toString()的情况下,我可以打印出对象引用而不会出现任何错误。但是,当我试图覆盖toString()方法时,我只能打印出一些输出(30个输出中的10个),而其他一些输出会给出错误 错误是: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
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的唯一可能原因是ifgetDepartTime()
或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的唯一可能原因是ifgetDepartTime()
或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(在深度对象图上)是一个缓慢的操作,使用时应小心。用于调试目的(在测试环境中)或一次性使用都可以。感谢您的及时回复!您的建议缩小了查找问题的范围。谢谢您的及时回复!你的建议缩小了发现问题的范围。