1つの必須パラメータと1つのオプションのパラメータが必要なメソッドを作成したいのですが、パラメータ(int ... b)を使用してオプションの配列を作成する方法が見つかりましたが、これは配列の場合、この値がnullであるか、ユーザーが入力したかのどちらかにしたいのですが、同じ名前の2つのメソッドを作成して1つのパラメーターを持つメソッドと2つのパラメーターを持つメソッドを作成できます1つの方法で完了しましたか?メソッドのjavaオプションのパラメータ
ありがとうございました
1つの必須パラメータと1つのオプションのパラメータが必要なメソッドを作成したいのですが、パラメータ(int ... b)を使用してオプションの配列を作成する方法が見つかりましたが、これは配列の場合、この値がnullであるか、ユーザーが入力したかのどちらかにしたいのですが、同じ名前の2つのメソッドを作成して1つのパラメーターを持つメソッドと2つのパラメーターを持つメソッドを作成できます1つの方法で完了しましたか?メソッドのjavaオプションのパラメータ
ありがとうございました
いいえ、Javaでは省略可能なパラメータはサポートされていません。オーバーロードのもう1つの選択肢(2つのパラメータにはあまり意味がありませんが、はのようになります)は、すべてのパラメータを表すBuilderタイプを使用することです。必要なパラメータを含むビルダーのコンストラクタを提供できます。オプションのそれぞれのセッターを使用して、セッターがビルダー自体を返すようにします。
foo.doSomething(new ParameterBuilder(10).setBar(2).setBaz(10));
ありがとうございましたJon、私はクラスのヘルパーメソッドのオプションのパラメータを使用してコンストラクタの書き込みではないが、あなたが言ったように、オーバーロードが最適な選択だと思われます ありがとう –
@ aizen92: in *コンストラクタ - 私が議論していたコンストラクタは、ParameterBuilder型のもので、これはこれらのパラメータを収集するための新しい型になります。このような状況では過度の攻撃ですが、他の場所では有用なパターンになる可能性があります。 –
いいえ、これはメソッドのオーバーロードは、Javaのメソッドのパラメータには、「デフォルト」の値がありません
私は、それが「オーバーロード」とは何かを「正確に」言っているわけではありません。そうでなければ、オプションのパラメータを持つ言語はオーバーロードしません。オーバーロードの1つの可能な使用*です。 –
ためですまさにです:だからメソッドを呼び出すと、のようなものになります。 varargsまたはメソッドのオーバーロードを使用します。
あなたの助けに感謝Binyamin、それはオーバーロードが最高です –
javaでは、これはメソッドオーバーロードと呼ばれるものによって実行されます。同じ名前でパラメータは異なる複数のメソッドを作成できます。例えば
:あなたのコードの
void method1(String arg1){
// only one argument, here you can delegate the work of this method to the implementation that takes the most parameters and pass null for the optional parameters.
method1(arg1, null);
}
void method1(String ar1, String arg2){
// do work, handle the case where arg2 is null.
}
クライアントは、どちらか一方を呼び出すことができます。それらには、2番目の引数がオプションであるかのように見えます。
あなたが探しているのは、デフォルトの引数のサポートです。 Javaにはこの機能はありませんが、この機能を多かれ少なかれシミュレートします。
単純な方法の1つは、メソッドのオーバーロードを使用することです。
別のアプローチは、特殊なケースを直接識別して、デフォルト値で置き換えることです。
はここイヴォLimmenにより、これらのアプローチの両方を混合する例です:私が見つけ
public void test() {
this.test(null, null);
}
public void test(String p1) {
this.test(null, null);
}
public void test(String p1, String p2) {
if(p1 == null) {
...
} else {
...
}
if(p2 == null) {
...
} else {
...
}
}
非常に興味深いアプローチは、デザインビルダーパターンを使用することです。例here
興味深い議論here
受け入れてあなたはここで良い答えの多くは、あなたが答えの1つのマークができていたにもありますがありますか?これはSOコミュニティの改善に役立ちます。ありがとうございました! –