0

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)

基本的に、「航空会社」という名前のクラスがあり、オブジェクトが作成されてに格納されてい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;
}

ご指導いただきありがとうございます。

4

2 に答える 2

3

return getFromCity() +" "+ 
  getToCity()+" "+
  getDepartTime().getHour()+":"+
  getDepartTime().getMin()+" "+
  getArriveDay()+" "+
  getArriveTime().getHour()+":"+
  getArriveTime().getMin()+" "+
  getCost();

NPE の唯一の考えられる原因は、ifgetDepartTime()またはgetArriveTime()return null です。

他のメソッドのいずれかが null を返す場合、JLS 15.18.1.1 によってそれらはリテラル string に変換されます"null"。メソッドを呼び出そうとしていて、返された参照が null の場合、NPE がスローされgetDepartTimeます。getArriveTime

于 2013-02-12T06:11:26.373 に答える