2016-12-04 13 views
3

私の先生は、私が書いている方法のためにこの類推を私にくれました。私はまだ、なぜaddメソッドがbooleanを返すのか分からないのですか?Java ArrayListクラスがaddのブール値を返すのはなぜですか?

何も返さない方がいいでしょうか?

+0

'List'インタフェースのためです。 – EJP

+2

@EJPは本当にありません。 'List'が拡張された' Collection'インターフェースのためです。リストのaddメソッドは常に 'true'を返します。 – Bohemian

答えて

8

これはCollection<E>インターフェイスからのものです。このインターフェイスはすべての種類のコレクションの祖先クラスとして使用されているため、addが効果的にコレクションを変更した場合に通知することをお勧めします。

Set<T>のようなコレクションには、追加された要素がコレクション内に既に存在する場合は変更されません。 List<T>の場合は、Javaが設計通りにtrueを返すように強制します。したがって、呼び出し元に操作が成功しなかったことを通知する場合は、別の方法(例外をスローするなど)を見つける必要があります。

コレクションは、それがすでに要素が含まれていること、それが例外をスローしなければならない以外の理由で特定の要素を追加することを拒否した場合

(というよりもfalseを返す):

この

は明らかに Collection<E>.addマニュアルに記載されています。これにより、この呼び出しが返った後にコレクションに常に指定された要素が含まれるという不変量が保持されます。

返される値は、失敗を示しているのではなく、正常な追加操作によってコレクションが変更された場合です。例外をスローすることによって、すべての失敗に通知する必要があります。

+0

@StephenC:それは一般的ですが、Javaの 'List 'には当てはまりません。 'add'契約で指定されている' List 'から継承するなら' true'を返すように強制されます。 – Jack

+0

@StephenC他の 'Collection 'はfalseを返すかもしれませんが、 'List'インターフェースは実際には' add'がtrueを返す必要があります。 https://docs.oracle.com/javase/7/docs/api/java/util/List.html#add(E) – CollinD

+0

@Jack 'Arrays.asList(1)'そのリストに何かを追加しようとしています**または** [Collections.singletonList(T) '](http://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#singletonList-T-)を参照してください。 –

4

ArrayList.add(E)のJavadocは、それが

が戻り値と説明: が真(Collection.add(E)で指定)

戻り値を言う: は本当、このコレクションが変更された場合電話の結果

booleanが返されなかった場合、呼び出し元はListをテストするか、Exceptionをチェックする必要があります。そうしないと、呼び出しが成功したかどうかを判断できません。 booleanを返す方が簡単だったと思います。

+1

Hmmm。リストに追加することは常に成功します(「Integer.MAX_VALUE」以上の要素を追加するなどのばかげたエッジケースを除く)ので、呼び出し元は何も学習しません。これは、リストのための 'return true'です。' Collection'なので、真偽値を返すだけです。 – Bohemian

1

簡単に言えば(これが私の理解に役立つ)戻り値は、add()が成功したことを示します。

ブール値を返さなかった場合は、何かを追加したことをどのように知っていますか?実際に何かを追加したことを手動で確認する必要があります。それは「不要」ですが、それは賢明です。

関連する問題