0

IP アドレス範囲 (abcd - abce) が与えられた場合、範囲間の配列リストで IP アドレスを返すメソッドが必要です。

オプション1 :

public static int getIPAddressesFromRange(String rangeStr, List list ) ;

戻り値はcount であり、入力リストには、範囲が持つ IP のリストが入力されます

オプション 2:

public static List getIPAddressesFromRange(String rangeStr)

戻り値は IP アドレスのリストです。

私の選択肢は 2 ですが、それは直感であり、私の主張を裏付けることはできません。

編集:オプション1が違反である設計原則はありますか?

4

11 に答える 11

5

私は言うだろう

public static List<String> getIPAddressesFromRange(String rangeStr)

IP アドレスを文字列として表すことにした場合。

#1 に対する反論:

  • 呼び出し元は事前にリストを作成する必要があります
  • 文書化しない限り、戻り値が何であるかは簡単ではありません
  • メソッドはその引数の 1 つを変更しますが、これは一般に禁止されていませんが、API のユーザーを驚かせないようにするのが最善です (特に、ドキュメントを読まない傾向がある場合)。
  • list パラメーターに誤って値を渡すとnull、NullPointerException が発生します。
  • 本当に気にするのであれば、リスト自体からいつでもリストの長さを取得できます。
于 2012-07-05T09:02:58.473 に答える
2

最初のオプションには2つの問題があるため、2番目のオプションが最適です。

  1. 冗長です。aListが返された場合、そのsize()メソッドを使用してそのカウントを取得できるため、カウントを返しても何も得られません。
  2. リストを検証する必要があり、場合によっては、メソッドが完全にその作業を実行できないことがあります。NullPointerException呼び出し元がnullを渡した場合、コードが注意深く記述されていないと、スローされる危険があります。また、その場合、新しいリストを指すようにパラメーターを再割り当てしても、呼び出し元は監視されないため、リモートで適切なオプションは、明確な例外をスローすることだけです。2番目のオプションを使用すると、リストが呼び出し元に返されるまで、リストを完全に制御できます。
于 2012-07-05T09:08:17.040 に答える
2

なぜ最初のメソッドでカウントを返したいのですか?リスト自体からIPの数を取得できます。

2番目の方法をお勧めします

于 2012-07-05T09:04:27.667 に答える
2

選択肢 1 よりも選択肢 2 を優先します。

とにかくリストにはそのカウントが含まれているため、2 つの値 (カウントとリスト) を返す必要はありません。

また、リストの型がわかっているので、ジェネリックを使用できます: List<String>.

最後に、範囲の最初と最後という 2 つの引数を取ることも検討してください。

于 2012-07-05T09:02:35.653 に答える
1

IMOメソッドのシグネチャは、この範囲内のアドレスの数ではなく、範囲からIPアドレスのリストを返すことを示唆しているため、オプション2も使用します。

于 2012-07-05T09:03:54.343 に答える
1

私は2番目のものが良いと思います:

  • カウントはリストのサイズです
  • 関数にリストを与える必要はありません
  • nullポインタ例外のリスクが少ない
于 2012-07-05T09:04:17.353 に答える
1

メソッドが何を返すかは誰にとっても明らかであるため、オプション 2 の方がおそらく優れています。
方法 1 は、将来のコーダーがこのパラメーターが何であるかを考えるのに時間を費やす可能性があります (適切に文書化されていない限り) が、方法 2 は非常に簡単です。

オプション 2 を使用すると、取得したリストを後で反復処理する必要がある場合に、一時変数が不要になり、より適切になります。

for (Object o : getIPAddressesFromRange(String rangeStr)) { ... }

また、生の型ではなくジェネリック型 を使用することをお勧めします。List<>

于 2012-07-05T09:02:45.367 に答える
1

詰め込み、詰め込みます。それがあなたのオプション2がすることです。

オプション 1 は、その入力引数を変更し、冗長な値 (リストから取得できるカウント) を返します。

もう 1 つのことは、おそらく IP アドレスの範囲は、文字列以外の型によってより適切に記述されるでしょう。

于 2012-07-05T09:03:26.370 に答える
0

事前に作成したリストに入力するか、新しいリストを作成するかによって異なります。

例:同じListオブジェクトを使用して関数を複数回呼び出し、メモリを節約できます。

または:複数のリストを比較するには、呼び出しごとに新しいリストを返すことができます。

オプション2を使用します。

于 2012-07-05T09:08:00.987 に答える
0

私の意見では、最初のメソッドはリストオブジェクトを同時変更にさらすため、2番目のメソッドシグネチャが一般的に最適です。したがって、メソッドの最後に、予想よりも少ない、多い、他のオブジェクトを保持する場合があります。

于 2012-07-05T09:03:30.187 に答える
0

あなたの直感も私のものです.getIPAddressesFromRangeにListの優先実装を使用させ、誰かがすでに入力されたリストを提供しないようにすることをお勧めします.

于 2012-07-05T09:03:18.963 に答える