Rumah >Java >javaTutorial >Bagaimanakah Parameter Pilihan Boleh Disimulasikan di Java?

Bagaimanakah Parameter Pilihan Boleh Disimulasikan di Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-15 13:54:19174semak imbas

How Can Optional Parameters Be Simulated in Java?

Mensimulasikan Parameter Pilihan dalam Java

Java tidak menyokong parameter pilihan secara asli. Walau bagaimanapun, terdapat pelbagai cara untuk mensimulasikan fungsi ini.

Kaedah Terlebih Muatan

Kaedah terlebih muatan dengan senarai parameter yang berbeza membolehkan anda menentukan parameter pilihan dengan menyediakan nilai lalai dalam beberapa kaedah. Contohnya:

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

Walau bagaimanapun, pendekatan ini menjadi rumit jika berbilang parameter pilihan daripada jenis yang sama wujud.

Varargs

Varargs boleh digunakan untuk mensimulasikan parameter pilihan jika semua parameter pilihan adalah sama jenis:

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);

Sebagai alternatif, varargs juga boleh digunakan dengan jenis parameter yang berbeza, tetapi ini memerlukan semakan tambahan:

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

Nulls

Menggunakan nilai nol untuk parameter pilihan ialah pilihan lain:

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

foo("a", null, 2);

Walau bagaimanapun, ini memerlukan menyemak nilai nol dalam badan kaedah.

Kelas Pilihan

Java 8 memperkenalkan kelas Pilihan, yang boleh digunakan untuk mewakili nilai pilihan:

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

foo("a", Optional.of(2));
foo("a", Optional.<Integer>absent());

Corak Pembina

Corak pembina ialah pendekatan lain, biasanya digunakan bersama dengan pembina:

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();

Peta

Apabila berurusan dengan sejumlah besar parameter pilihan, menggunakan peta untuk menghantarnya sebagai pasangan nilai nama boleh menjadi mudah:

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")); 

Dalam Java 9, mengakses nilai parameter daripada peta menjadi lebih mudah:

// ...
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"));

Pendekatan ini menyediakan pilihan yang berbeza untuk mensimulasikan parameter pilihan dalam Java, membolehkan anda memilih kaedah yang paling sesuai untuk keperluan khusus anda.

Atas ialah kandungan terperinci Bagaimanakah Parameter Pilihan Boleh Disimulasikan di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn