Java オプションパラメータ

Rupam Yadav 2023年1月30日 2021年6月30日
  1. Java でオプションのパラメータを使用するには、メソッドのオーバーロードを使用する
  2. Java で Optional コンテナオブジェクトを使用してオプションのパラメータを設定する
  3. Java で Build Pattern を使用してオプションのパラメータを設定する
  4. Java で Varargs を使用してオプションのパラメータを設定する
Java オプションパラメータ

Java クラスでは、メソッドまたは関数を設計するときに、一部の引数がその実行のためにオプションである場合があります。Java にはオプションのパラメーターはありませんが、この記事で説明する次の手法を使用してオプションのパラメーターをシミュレートできます。

Java でオプションのパラメータを使用するには、メソッドのオーバーロードを使用する

クラスに同じ名前で異なるパラメーターをとる複数のメソッドがある場合、それはメソッドオーバーロードと呼ばれます。ここに、同じ名前 mul の 2つのメソッドを持つ Multiply というクラスがあります。メソッドに渡される引数は異なり、1つは 2つの int 型引数を取り、もう 1つは 3つを取ります。

class Multiply{
    static int mul(int a,int b){return a*b;}
    static int mul(int a,int b,int c){return a*b*c;}
}
class TestOverloading{
    public static void main(String[] args){
        System.out.println(Multiply.mul(2,11));
        System.out.println(Multiply.mul(2,2,11));
    }}

出力:

22
44

Java で Optional コンテナオブジェクトを使用してオプションのパラメータを設定する

Java では、Optional は null 以外の値を含む場合と含まない場合があるコンテナオブジェクトです。値が存在する場合、isPresent() メソッドは true を返し、get() メソッドは値を返します。

null 値が予想される場合は、このクラスの ofNullable() メソッドを使用できます。空の Optional オブジェクトを返し、例外をスローしません。ここでは、変数 lastNameStudent クラスオブジェクトに null で渡されるため、null 値を含む可能性のある Optional オブジェクトを作成しました。

メソッド isPresent() は、値が存在するかどうかをチェックします。それ以外の場合は、以下のコードに示すように、デフォルトの文字列が割り当てられます。

import java.util.Optional;

public class Main
{
 		public static void main(String args[]){
        Student("John",null,25);
    }
    private static void Student(String name, String lastName, int age){
        Optional<String> ln = Optional.ofNullable(lastName);
        String a = ln.isPresent() ? ln.get() : "Not Given";
        System.out.println("name : "+name + ", lastname : "+a +", age : "+age);
    }
}

出力:

name : John, lastname : Not Given, age : 25

Java で Build Pattern を使用してオプションのパラメータを設定する

Build Pattern の目的は、複雑なオブジェクトの構築をその表現から分離することです。オブジェクトの作成に必要なロジックとデフォルトの構成値は、builder クラスに含まれています。

このコードでは、追加のクラス UserBuilder を使用します。これは、不変性を失うことなく User オブジェクトを構築するために必要なすべてのプロパティとオプションのパラメーターの組み合わせを含みます。User クラスには、不変性を維持するためのゲッターのみがあり、セッターはありません。

public class User
{
    private final String firstName; // required
    private final String lastName; // required
    private final int age; // optional
    private final String email; // optional

    private User(UserBuilder builder) {
        this.firstName = builder.firstName;
        this.lastName = builder.lastName;
        this.age = builder.age;
        this.email = builder.email;
    }

    public String getFirstName() {
        return firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public int getAge() {
        return age;
    }
    public String getEmail() {
        return email;
    }

    @Override
    public String toString() {
        return "User: "+this.firstName+", "+this.lastName+", "+this.age+", "+this.email;
    }

    public static class UserBuilder
    {
        private final String firstName;
        private final String lastName;
        private int age;
        private String email;

        public UserBuilder(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }
        public UserBuilder age(int age) {
            this.age = age;
            return this;
        }
        public UserBuilder email(String email) {
            this.email = email;
            return this;
        }
        public User build() {
            User user =  new User(this);
            return user;
        }
    }
}

TestUser クラスでは、UserBuilder を使用して User クラスオブジェクトを作成します。user1 オブジェクトの場合、すべての属性を渡しますが、user2 オブジェクトの場合、age および email 引数を渡しません。したがって、オプションのパラメータにはデフォルト値が使用されます。build() メソッドは User オブジェクトを作成して返します。

public class TestUser {
    public static void main(String args[]){
        User user1 = new User.UserBuilder("John", "Doe")
                .age(24)
                .email("john.doe@dex.com")
                .build();

        System.out.println(user1);
        User user2 = new User.UserBuilder("Jack", "Luther")
                .build();

        System.out.println(user2);

    }
}

出力:

User: John, Doe, 24, john.doe@dex.com
User: Jack, Luther, 0, null

Java で Varargs を使用してオプションのパラメータを設定する

Java では、Varargs(可変長引数)を使用すると、メソッドはゼロまたは複数の引数を受け入れることができます。この特定のアプローチの使用は、メンテナンスの問題を引き起こすため、お勧めしません。

以下のコードには、メソッド display() を持つ VarargsExample クラスがあります。このメソッドは、String タイプの任意の数のパラメーターを取ります。varargs を使用する際に留意すべきいくつかのルールは、各メソッドが持つことができる varargs パラメーターは 1つだけであり、それが最後のパラメーターでなければならないということです。

public class VarArgsCheck {
    public static void main (String args[]){
        VarargsExample.display();
        VarargsExample.display("here","are","the","varargs","to","check");
    }
}
class VarargsExample {
     static void display(String... values) {
        String arr[] = values;
        System.out.println("display method invoked ");
        System.out.println("Value length "+arr.length);

    }
}

出力:

display method invoked 
Value length 0
display method invoked 
Value length 6
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Function