15

Java でデフォルトのメソッド パラメータ値を設定することは可能ですか?

例:メソッドがある場合

public int doSomething(int arg1, int arg2)
{
//some logic here
    return 0;
}

パラメータの有無にかかわらず呼び出すことができるように、指定されたメソッドを変更することは可能ですか?

例:

doSomething(param1, param2);
doSomething();

ありがとう!

4

7 に答える 7

52

これは、メソッドのオーバーロードによって実現できます。

public int doSomething(int arg1, int arg2)
{
        return 0;
}

public int doSomething()
{
        return doSomething(defaultValue0, defaultValue1);
}

このパラメーターなしのメソッドを作成することにより、パラメーターなしのメソッドの実装内で指定したデフォルトの引数を使用して、ユーザーが parameterfull メソッドを呼び出すことができるようになります。これは、メソッドのオーバーロードとして知られています。

于 2009-06-24T13:37:37.250 に答える
17

引数が同じタイプの場合、varargs を使用できます。

public int something(int... args) {
    int a = 0;
    int b = 0;
    if (args.length > 0) {
      a = args[0];
    }
    if (args.length > 1) {
      b = args[1];
    }
    return a + b
}

しかし、この方法では、個々の引数のセマンティクスが失われます。または

パラメータ化されたバージョンへの呼び出しを中継するオーバーロードされたメソッドがあります

public int something() {
  return something(1, 2);
}

または、メソッドが何らかの初期化手順の一部である場合は、代わりにビルダー パターンを使用できます。

class FoodBuilder {
   int saltAmount;
   int meatAmount;
   FoodBuilder setSaltAmount(int saltAmount) {
       this.saltAmount = saltAmount;
       return this;
   }
   FoodBuilder setMeatAmount(int meatAmount) {
       this.meatAmount = meatAmount;
       return this;
   }
   Food build() {
       return new Food(saltAmount, meatAmount);
   }
}

Food f = new FoodBuilder().setSaltAmount(10).build();
Food f2 = new FoodBuilder().setSaltAmount(10).setMeatAmount(5).build();

次に、Food オブジェクトを操作します

int doSomething(Food f) {
    return f.getSaltAmount() + f.getMeatAmount();
}

ビルダー パターンを使用すると、後でパラメーターを追加/削除することができ、オーバーロードされた新しいメソッドを作成する必要はありません。

于 2009-06-24T13:40:02.703 に答える
9

いいえ。Java は C++ のようなデフォルト パラメータをサポートしていません。別のメソッドを定義する必要があります。

public int doSomething()
{
   return doSomething(value1, value2);
}
于 2009-06-24T13:37:28.263 に答える
3

C# のようにパラメーターのデフォルト値を宣言することはできませんが (私は信じています)、単純にオーバーロードを作成することができます。

public int doSomething(int arg1, int arg2) {
    //some logic here
    return 0;
}

//overload supplies default values of 1 and 2
public int doSomething() {
    return doSomething(1, 2);
}

このようなことをする場合は、あなたのコードを扱う他のすべての人に好意を示し、使用しているデフォルト値が何であるかを Javadoc コメントで必ず言及してください。

于 2009-06-24T13:38:56.030 に答える
2

Java でデフォルト値を設定することはできません。これに対処するための私の好ましい方法は、メソッドをオーバーロードすることです。

public class MyClass
{
  public int doSomething(int arg1, int arg2)
  {
    ...
  }

  public int doSomething()
  {
    return doSomething(<default value>, <default value>);
  }
}
于 2009-06-24T13:40:09.583 に答える
1

メソッドをさまざまなパラメーターでオーバーロードできます。

public int doSomething(int arg1, int arg2)
{
//some logic here
        return 0;
}

public int doSomething(
{
doSomething(0,0)
}
于 2009-06-24T13:39:12.363 に答える
1

このドキュメントを誤解していないことを願っていますが、Java 1.8 を使用している場合、理論上は、実装するインターフェース内でデフォルト メソッド (「ディフェンダー メソッド」) の動作する実装を定義することで、このようなことを実現できます。

interface DoInterface {
    void doNothing();
    public default void remove() {
       throw new UnsupportedOperationException("remove");
    }
    public default int doSomething( int arg1, int arg2) {
        val = arg1 + arg2 * arg1;
        log( "Value is: " + val );
        return val;
    }
}
class DoIt extends DoInterface {
    DoIt() {
        log("Called DoIt constructor.");
    }
    public int doSomething() {
        int val = doSomething( 0, 100 );
        return val;
    }
}

次に、いずれかの方法で呼び出します。

DoIt d = new DoIt();
d.doSomething();
d.soSomething( 5, 45 );
于 2013-03-29T15:42:17.670 に答える