21

私は、Java の関数のデフォルト パラメータを含めない理由の背後にある理由を見つけようと、周りを見回してきました。

可変引数を使用するか、より少ないパラメーターを受け入れるオーバーロードされた関数をいくつか作成し、すべてのパラメーターを受け取る実際の関数を呼び出すことにより、動作をシミュレートできることを認識しています。ただし、これらのオプションはいずれも、C++ の構文などの明快さと使いやすさに匹敵しません。

次のようなものになる確かな技術的理由があるかどうかは誰にもわかりますか

void myFunc(int a=1, int b=2) {...}

Java の新しいバージョンで望ましくない、または元に戻すことができますか?

4

4 に答える 4

4

Java の初期バージョンには含まれていませんでした。おそらく物事を単純にするために必要ないと判断したからです。

下位互換性のある方法で行う必要があるため、今すぐ追加するのは難しいでしょう。Java5 に varargs、autoboxing、generics を追加することは大仕事であり、制限された機能 (型消去など) でしか実行できず、複雑さが増しました (新しいメソッド解決規則により、優れた試験のトリック問題が作成されます)。

あなたの最善の策は、JVM で非 Java 言語を使用することです。たぶん、そのうちの1人はすでにこれを持っています。

于 2010-11-26T09:37:06.337 に答える
3

どの値が省略され、どの値が省略されていないかが複雑であることを除けば、技術的な理由はわかりません。

たとえば、あなたのサンプルでは、​​1 つの整数のみが渡された場合、それをデフォルトにする必要がありますかa? bおそらくそうaですが、そのレベルのあいまいさが追加されます。

簡単な解決策は、

void myFunc(Integer a, Integer b) {
  if (a == null) a = 1;
  if (b == null) b = 2;

}

はい、それはもっと長く続きます。はい、メソッド署名(JavaDocに表示される可能性があります)ではなく、コード内のデフォルト設定を隠しますが、一貫性を強制します。

于 2010-11-26T09:35:30.973 に答える