Укажите определенные параметры в методе как обязательные - PullRequest
0 голосов
/ 07 апреля 2020

Я делаю SDK, используя java, где типичный метод, доступный клиенту, будет выглядеть следующим образом

public void createUser(String name, String email ,int age, String bio, String address, String phoneNumber){
/* 
body
*/
}

Так что проблема в том, что только поля имени и адреса электронной почты являются обязательными (не пустыми или пустыми) а остальные просто необязательны (допускаются нулевые значения). Кроме переопределения и создания исключения времени выполнения внутри метода, есть ли способ правильно указать клиенту, вызывающему функцию sdk, что поля имени и адреса электронной почты являются обязательными?

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

Java к сожалению, не поддерживает необязательные параметры. Одним из решений этого может быть использование шаблона Builder. Вы создаете отдельный класс UserBuilder, который принимает только необходимые аргументы в своем конструкторе. Другие аргументы передаются через множество функций. Это также позволяет вам задавать некоторые параметры по умолчанию. Когда все параметры установлены, вы звоните UserBuilder.getUser() и ваш объект User создается для вас. Как правило, вы также убедитесь, что конструктор User недоступен в других местах.

class User{

    String name, email, bio, address, phoneNumber;
    int age;

    User(String name, String email, int age, String bio, String address, String phoneNumber){
        this.name = name;
        this.email = email;
        this.age = age;
        this.bio = bio;
        this.address = address;
        this.phoneNumber = phoneNumber;
    }
}
class UserBuilder{
    String name, email, bio, address, phoneNumber;
    int age;
    public UserBuilder(String name, String email){
        this.name = name;
        this.email = email;
    }

    public void setBio(String bio) {
        this.bio = bio;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User getUser(){
        return new User(name, email,age,bio,address,phoneNumber);
    }
}

Например, именно так вы бы создали объект User с классом построителя, если бы вы только хотели задать имя , возраст и адрес электронной почты:

UserBuilder builder = new UserBuilder(name,email);
builder.setAge(38);
builder.getUser();
1 голос
/ 07 апреля 2020

Широко используемая библиотека для этого - Project Lombok и предоставленная аннотация @NonNull. Ваш метод будет выглядеть следующим образом.

public void createUser(@NonNull String name, @NonNull String email ,int age, String bio, String address, String phoneNumber){
/* 
body
*/
}

Если метод вызывается с пустыми значениями для этих полей, произойдет ошибка компиляции.

К вашему сведению: В вашем случае Я хотел бы рассмотреть возможность использования Pattern Designer Pattern , поскольку не все ваши параметры являются обязательными. Это сделает ваш "SDK" приятнее в использовании.

0 голосов
/ 07 апреля 2020

Вы можете добавить аннотацию @NonNull перед именем и идентификатором электронной почты.

@ NonNull - компилятор может определить случаи, когда путь к коду может получить нулевое значение, без необходимости отладки исключения NullPointerException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...