существует ли стандартный способ проверки допустимого ввода конструктора

#java #validation #user-input #static-methods #checkvalidity

#java #проверка #пользовательский ввод #статические методы #проверка правильности

Вопрос:

я попытался написать класс Java, и я также создал конструктор, и я пытаюсь создать модульный тест для класса, а также для проверки допустимого ввода конструктора, но для допустимого ввода конструктора я проверяю несколько ситуаций с полями для проверки, например, проверяю not null и not blank для строки и регулярного выражения, а также потому, чтомой класс неизменяем для проверки каждой ситуации проверки, мы должны создать новый объект класса. мой вопрос в том, нет ли проблем, если я напишу статический метод для доступа к пакету, а затем в конструкторе я их вызвал??

в любом случае спасибо за вашу помощь…

 public class Address {
    private final String street;
    private final String city;
    private final String pin;//postal index number.

    public Address(String street, String city, String pin) {
        if (street.isBlank())
            throw new IllegalArgumentException("the street input cannot be blank");
        if (city.isBlank())
            throw new IllegalArgumentException("the city input cannot be blank");
        if (pin.isBlank())
            throw new IllegalArgumentException("the pin input cannot be blank");
        if (!street.matches("^\w(?:\w \-?)\w $"))
            throw new IllegalArgumentException("the street input must be character number and -");
        if (!city.matches("^[a-zA-Z]{2,20}$"))
            throw new IllegalArgumentException("the city name must be character and length between 2 and 20");
        if (!pin.matches("^\d{5}\-?\d{5}$"))
            throw new IllegalArgumentException("the pin must be digit and can be a - between 5'th and 6'th of character");
        this.street = Objects.requireNonNull(street,"the street cannot be null");
        this.city = Objects.requireNonNull(city,"the city cannot be null");
        this.pin = Objects.requireNonNull(pin,"the pin cannot be null");
    }
}
  
 public class Address {
    private final String street;
    private final String city;
    private final String pin;//postal index number.

    public Address(String street, String city, String pin) {
        checkValidInput(street,city,pin);
        this.street = Objects.requireNonNull(street,"the street cannot be null");
        this.city = Objects.requireNonNull(city,"the city cannot be null");
        this.pin = Objects.requireNonNull(pin,"the pin cannot be null");
    }
    
    static void checkValidInput(String street,String city,String pin){
        Objects.requireNonNull(street,"the street cannot be null");
        Objects.requireNonNull(city,"the city cannot be null");
        Objects.requireNonNull(pin,"the pin cannot be null");
        
        if (street.isBlank())
            throw new IllegalArgumentException("the street input cannot be blank");
        if (city.isBlank())
            throw new IllegalArgumentException("the city input cannot be blank");
        if (pin.isBlank())
            throw new IllegalArgumentException("the pin input cannot be blank");
        if (!street.matches("^\w(?:\w \-?)\w $"))
            throw new IllegalArgumentException("the street input must be character number and -");
        if (!city.matches("^[a-zA-Z]{2,20}$"))
            throw new IllegalArgumentException("the city name must be character and length between 2 and 20");
        if (!pin.matches("^\d{5}\-?\d{5}$"))
            throw new IllegalArgumentException("the pin must be digit and can be a - between 5'th and 6'th of character");
        
    }
}
  

Комментарии:

1. существуют ли пакеты для проверки? скорее всего, и да. означают ли они, что вам не нужно ничего предоставлять самостоятельно? нет. либо вы добавляете несколько проверок, либо вы просто хотите добавить одну. поймите, что ваши проверки основаны на ваших требованиях, и те, кто создает эти библиотеки, не знали / не ориентировались на ваши требования.

2. используйте @Nonnull аннотацию для ваших входных параметров

3. @JudeNiroshan ну, это может помочь с документацией, но само по себе не предотвращает исключения во время выполнения. Некоторые статические анализаторы могут использовать его для выявления многих (но не всех) проблемных ситуаций.

4. Будьте осторожны с некоторыми из ваших проверок, чтобы вы не делали недействительными реальные имена. Например, город «Уэст-Честер» потерпел бы неудачу и все же был бы допустимым вводом.