ホームページ > Java > &#&チュートリアル > Java でオプションのパラメータをシミュレートするにはどうすればよいですか?

Java でオプションのパラメータをシミュレートするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-15 13:54:19
オリジナル
170 人が閲覧しました

How Can Optional Parameters Be Simulated in Java?

Java でのオプションのパラメータのシミュレーション

Java は、オプションのパラメータをネイティブにサポートしません。ただし、この機能をシミュレートするにはさまざまな方法があります。

メソッドのオーバーロード

さまざまなパラメータ リストを使用してメソッドをオーバーロードすると、一部のパラメータにデフォルト値を指定することで、オプションのパラメータを指定できます。方法。例:

void foo(String a, Integer b) {
    //...
}

void foo(String a) {
    foo(a, 0); // Here, 0 is the default value for b
}

foo("a", 2);
foo("a");  // Uses the default value for b
ログイン後にコピー

ただし、同じ型のオプションのパラメーターが複数存在する場合、このアプローチは面倒になります。

Varargs

Varargs は次のとおりです。すべてのオプションのパラメータが同じである場合に、オプションのパラメータをシミュレートするために使用されます。 type:

void foo(String a, Integer... b) {
    Integer b1 = b.length > 0 ? b[0] : 0;
    Integer b2 = b.length > 1 ? b[1] : 0;
    //...
}

foo("a");
foo("a", 1, 2);
ログイン後にコピー

あるいは、可変引数をさまざまなパラメータ型で使用することもできますが、これには追加のチェックが必要です:

void foo(String a, Object... b) {
    Integer b1 = 0;
    String b2 = "";
    if (b.length > 0) {
        if (!(b[0] instanceof Integer)) { 
            throw new IllegalArgumentException("...");
        }
        b1 = (Integer)b[0];
    }
    if (b.length > 1) {
        if (!(b[1] instanceof String)) { 
            throw new IllegalArgumentException("...");
        }
        b2 = (String)b[1];
        //...
    }
    //...
}

foo("a");
foo("a", 1);
foo("a", 1, "b2");  // Note that the order of arguments matters
ログイン後にコピー

Null

オプションのパラメータに null 値を使用することは別の方法ですoption:

void foo(String a, Integer b, Integer c) {
    b = b != null ? b : 0;
    c = c != null ? c : 0;
    //...
}

foo("a", null, 2);
ログイン後にコピー

ただし、これにはメソッド本体の null 値をチェックする必要があります。

Optional Class

Java 8 では、Optional クラスが導入されました。 、オプションの値を表すために使用できます:

void foo(String a, Optional<Integer> bOpt) {
    Integer b = bOpt.isPresent() ? bOpt.get() : 0;
    //...
}

foo("a", Optional.of(2));
foo("a", Optional.<Integer>absent());
ログイン後にコピー

Builderパターン

ビルダー パターンは別のアプローチであり、通常はコンストラクターと組み合わせて使用​​されます。

class Foo {
    private final String a; 
    private final Integer b;

    Foo(String a, Integer b) {
      this.a = a;
      this.b = b;
    }

    //...
}

class FooBuilder {
  private String a = ""; 
  private Integer b = 0;
  
  FooBuilder setA(String a) {
    this.a = a;
    return this;
  }

  FooBuilder setB(Integer b) {
    this.b = b;
    return this;
  }

  Foo build() {
    return new Foo(a, b);
  }
}

Foo foo = new FooBuilder().setA("a").build();
ログイン後にコピー

マップ

オプションのパラメータが多数ある場合、マップを使用してそれらを名前と値のペアとして渡すことができます。便利:

void foo(Map<String, Object> parameters) {
    String a = "";
    Integer b = 0;
    if (parameters.containsKey("a")) { 
        if (!(parameters.get("a") instanceof Integer)) { 
            throw new IllegalArgumentException("...");
        }
        a = (Integer)parameters.get("a");
    }
    if (parameters.containsKey("b")) { 
        //...
    }
    //...
}

foo(ImmutableMap.<String, Object>of(
    "a", "a",
    "b", 2, 
    "d", "value")); 
ログイン後にコピー

Java 9 では、マップからパラメータ値にアクセスするのが簡単になりました:

// ...
static <T> T getParm(Map<String, Object> map, String key, T defaultValue) {
  return (map.containsKey(key)) ? (T) map.get(key) : defaultValue;
}
// ...

void foo(Map<String, Object> parameters) {
  String a = getParm(parameters, "a", "");
  int b = getParm(parameters, "b", 0);
  // ...
}

foo(Map.of("a","a",  "b",2,  "d","value"));
ログイン後にコピー

これらのアプローチでは、Java でオプションのパラメータをシミュレートするためのさまざまなオプションが提供され、特定のニーズに最適な方法。

以上がJava でオプションのパラメータをシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート