#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. Будьте осторожны с некоторыми из ваших проверок, чтобы вы не делали недействительными реальные имена. Например, город «Уэст-Честер» потерпел бы неудачу и все же был бы допустимым вводом.