2016-09-30 14 views
2

ItemOrderオブジェクトを使用するクラスShoppingCartがあります。ブール戻り値の型はなぜ必要ですか?

public class ShoppingCart extends ArrayList<ItemOrder> { 

私は新しいオブジェクトを追加していない場合ので、新しいオブジェクトにインデックスを交換する場合は、オブジェクトがすでに、配列リストにexsistsかどうかを確認する方法があります。

public boolean add(ItemOrder order){ 
    if (super.indexOf(order) != -1){  //ITEM ALREADY IN LIST, REPLACE 
     super.remove(super.indexOf(order)); 
     super.set(super.indexOf(order), order); 
    } 
    else         //ITEM NOT IN LIST, ADD 
     super.add(order); 
    return true;       //TO SATISFY RETURN TYPE 
} 

私がこのメソッドを書いたとき、私は戻り値の型を持っていませんでした。戻り値の型を無効にすることを提案したエラーが発生したので、私はそれを行いました。私は別のエラーが発生し、戻り値の型はブール値でなければなりません。私の唯一の問題は、メソッド自体が本質的に(少なくとも私にとっては)真偽のリターンではないということです。私が必要とするのは、オブジェクトをArrayListに追加/置換するだけで、何も返さないことです。

なぜこのメソッドはブール戻り値の型を必要としますか?私は最後にreturn true;を投げ込むだけで安全ですか?それとも実際に使用するべきですか?

+6

を持つことができます:あなたはそれがされるので、あなたも@Override注釈が必要であることをはっきりと見ることができますIDEでの作業

。 add()を行い、List.add()を尊重しないようにします。それをしないでください。 ArrayListを拡張しないでください。代わりに、ShoppingCartのフィールドとして** Listを使用します。 ShoppingCartはリストではありません。リストを使用して要素を格納することもできます。 –

+3

あなたが 'super.remove(super.indexOf(order));'を実行した場合、次のステートメントの中のindexOfは何ですか? 'super.set(super.indexOf(order)、order);'? –

+0

明確にする:このメソッドは、[this one](http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html)と同じ名前と同じパラメータ型を持つため、メソッドをオーバーライドしています。 #add-E-)。別の戻り値の型を指定しようとしましたが、あるメソッドが別の値を上書きするかどうかを判断する際にJavaは戻り値の型を調べません。 – ajb

答えて

7

あなたadd方法は、コレクションがコール

参照の結果として変更された場合はtrue Collection.add

リターンのjavadocによるとCollection.add

を実装ArrayList.addを上書きします:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add(E) およびhttps://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#add(E)

方法 public boolean add(String order){..} あなたが実際にそれがArrayList<String>クラスに含まれているデフォルトのメソッドをオーバーライドしているの追加

public class Example extends ArrayList<String>{ 

public boolean add(String order){ 
     if (super.indexOf(order) != -1){  //ITEM ALREADY IN LIST, REPLACE 
      super.remove(super.indexOf(order)); 
      super.set(super.indexOf(order), order); 
     } 
     else         //ITEM NOT IN LIST, ADD 
      super.add(order); 
     return true;       //TO SATISFY RETURN TYPE 
    } 

} 

:0

+0

これは、私がYouTubeからコードする方法を学ぶことから得られるものです。では、注釈を上書きする必要がありますか?コードはうまくいっています。また、私は単に真実を返すだけで安全ですか? – Podo

+1

'@ override'アノテーションなしでうまくいくわけではありませんが、メンテナンスの目的でそれを組み込むことをお勧めします。 'return true;に関しては、今のところうまくいくかもしれませんが、あなたのコードが' ArrayList'を期待するクラスによって使用され、 'add()'が失敗するか 'false'を返すときに何かします。ブレーク。したがって、オーバーライドするときにオーバーライドされたメソッド契約を尊重する必要があります。すべてがokey-dokeyの場合はtrueを返し、それ以外の場合はfalseを返します。 –

0

あなたは以下のクラスを持っていることを想像してみてください。

@Override 
    public boolean add(String order){ 
     if (super.indexOf(order) != -1){  //ITEM ALREADY IN LIST, REPLACE 
      super.remove(super.indexOf(order)); 
      super.set(super.indexOf(order), order); 
     } 
     else         //ITEM NOT IN LIST, ADD 
      super.add(order); 
     return true;       //TO SATISFY RETURN TYPE 
    } 

また、あなたは、あなたがリストをオーバーライドしているのJavaDocを見て(https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#add-int-E-

関連する問題