0

morphadorner の操作を学んでいるときに、興味深いコードに出会いました。コードは以下のとおりです。

Collection<Object>[] nodes = someFunction()  

私の質問は、この宣言が必要および/または有効なシナリオはどれですか。

Collection<Object>[] nodes

私は見た:

Collection<Object[]> nodes

Arrayしかし、 ofが必要になるシナリオは考えられませんCollections。繰り返しになりますが、これはいつ使用されるのでしょうか。

これはjavadocです:

java.util.Set<java.lang.String>[] 

findNames(java.lang.String text)
      Returns names from text.
4

3 に答える 3

3

初めに、

Collection<Object[]> nodes;

Collection<Object>[] nodes;

2つの異なるものです。1 つ目は配列のコレクションで、2 つ目はコレクションの配列です。

後者をいつ使用するかについては、私の答えは「めったにありません」です。概念的にはこれは非常に単純ですが、 Java 配列とジェネリックはうまく連携しません

したがって、より一般的に見られる

ArrayList<Collection<Object>> nodes;

これは似ていますが、はるかに簡単に処理できます。

が優れた設計の例であるかどうかfindNames()に関して、私の主な反論は、配列の要素が何を表しているか (またはその数) を関数シグネチャから推測することは完全に不可能だということです。このため、別の方法で、おそらく 2 つの明確な名前のアクセサーを持つカスタム クラスを返すことになります。

于 2013-03-26T15:49:01.560 に答える
1

コードはコンパイルされるので、おそらく有効な Java です。

デザイナーがより良い解決策を思いつかなかった場合に必要です。

良いデザインか?

かもしれませんが、おそらくそうではありません。1 つのシナリオは、関数が常に 2 つまたは 3 つのコレクションを返す場合です (つまり、複数のコレクションを返しますが、数は決して変わりません)。

このためのオブジェクトを作成することもできますが、これは Java であるため、非常に退屈なコードが何行も必要になります。また、コレクションごとに便利な名前を考えなければならないことも意味します。

投稿されたJavaDocを考慮すると、配列の数はテキスト内の文の数に依存するようです。

したがって、このシナリオでは、 の を返しますList(Collection文の順序は決して変わらず、インデックスで取得したい場合があるため)。

デザイナーは、リストには要素を追加できるが配列には追加できないと主張するかもしれませんが、私は変更不可能なリストを使用します。

したがって、この例では、それは悪い設計だと言えます。

于 2013-03-26T15:48:19.527 に答える
0
Collection<Object>[] nodes

の を取得していることを意味するため、有効arrayですCollection<Object>。一方、

Collection<Object[]> nodes

Collectionを含むarraysを取得していることを意味しますObjects

私の質問は、この宣言が必要および/または有効なシナリオはどれですか。

set発言者objects(人)が異なる場合の状況を考えてみましょう。それぞれsetが特定の国の人々に属しています。setそして、指定されたサイズの配列を作成します。その場合、次の構文を使用します。

Set<People>[] setOfPeople = new TreeSet<People>[5]; // We want to consider people of 5 different countries.
于 2013-03-26T15:51:48.620 に答える