0

異なるパラメーター型で動作する複数の同様のメソッドを持つクラスに直面した場合、メソッド名にパラメーターの何らかの説明を含めますか?それとも名前を同じままにして、パラメーター自体が十分な情報を提供することを信頼しますか? 以下に示す 2 つの例を比較してください。

interface Option1 {
    update(ObjectA);
    update(ObjectB);
    update(List<Object>);
}

interface Option2 {
    updateA(ObjectA);
    updateB(ObjectB);
    updateAll(List<Object>);
}

以下の議論を聞いたことがあります。

  • 冗長な情報が含まれていないため、オプション 1 の方が適しています。
  • オプション 2 は、コードが読みやすく、維持しやすいため、より優れています。
4

2 に答える 2

1

場合によります。メソッドのオーバーロードが存在するのは、それが便利だからです。しかし、それはあなたを悲しませることもできます。

オーバーロードを検討している場合は、次のことを考慮してください。

  • メソッドはさまざまな問題に対処していますか?
  • 読みやすさは損なわれますか? 読者は、どのメソッドが呼び出されているかを知ることができますか?
  • あなたのインターフェースが、同様のメソッド名を持つ他のインターフェースと混在している可能性はありますか?
  • 引数が複数のパラメータ型を実装する可能性はありますか? その場合、あいまいさが生じる可能性があり、コンパイラはそれに対処する必要があります。

例えば:

  • JavaString.indexOf()はオーバーロードされています。すべてのオーバーロードには同じ意図があります。リーフ クラスに追加の indexOf() メソッドが混在することはありません。
  • 通常、setX() メソッドにはすべて名前が付けられているわけset()ではありません。上記の質問のすべてに「はい」と答える場合があります。
于 2011-02-01T15:55:33.603 に答える
0

メソッドのオーバーロードをサポートする静的に型付けされた言語の場合、オプション1。

オブジェクト階層を処理する場合は、オプション1。

他のすべての場合については、オプション2をお勧めします。

私の2セント。:)

于 2011-02-01T09:11:37.250 に答える