Исключение, если ввод недопустим в Java.Например, возраст - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу вызвать исключение, чтобы пользователь знал, что значение возраста должно быть от 1 до 120. Найдите ниже примера.

Есть ли лучший способ вызвать исключение?

public class Lesson18Encapsulation3 {

    private int age;
    private String name;
    private int salary;

    public int getAge() {
        return age;
    }
    public void setAge(int age) {

        if ( age < 0 && age >= 120) 

            this.age = age;
        throw new IllegalArgumentException (" age can not be negative or more than 120");

//getters and setters

    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
public class Lesson18Encapsulation4 {

    public static void main(String[] args) {
        Lesson18Encapsulation3 emp = new Lesson18Encapsulation3();

        emp.setAge(220);
        emp.setName("None");

        System.out.println( "age : " + emp.getAge());
        System.out.println( "name : " + emp.getName());
    }
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

В принципе, то, что вы делаете здесь, является примером дизайна по контракту : вы определяете предварительное условие для вашего метода.

A) Неправильное условие

Ваше состояние неверное.Вы хотите создать исключение в совершенно противоположном случае:

if(age < 0 || age >= 120) {
   // Throw exception
}

(На это также указывал @Nikolas в предыдущем сообщении)

B) Создание проекта по контрактуЯвный

Я бы сделал это явно, предоставив метод Assertion:

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

private void assertCorrectAge(int age) {
    if(age < 0 || age >= 120) {
        throw new IllegalArgumentException(" ... ");
    }
}

Некоторые люди предложат использовать сборку Java в ключевом слове assert.Я предлагаю не делать этого, потому что он отключен в большинстве версий JVM (поэтому он не срабатывает).

C) Используйте библиотеку

Имеет много утвержденийметод проверки предварительных условий, складывается из множества шаблонов кода.Об этом может позаботиться библиотека (например, Гуава Google ):

public void setAge(int age) {
    Preconditions.checkArgument(age >= 0, "negative age: %s", age);
    Preconditions.checkArgument(age < 120, "age too high: %s", age);
    this.age = age;
}
0 голосов
/ 25 сентября 2018

Условие неверное.Вы хотите установить возраст, только если диапазон составляет от 0 до 120:

if (age >= 0 && age < 120) {
    this.age = age;
} else throw new IllegalArgumentException("Age can not be negative or more than 120");

В качестве альтернативы (обратите внимание на измененный оператор ||, который означает или ):

if (age < 0 || age >= 120) {
    throw new IllegalArgumentException("Age can not be negative or more than 120");  
}
this.age = age;

Совершенное исключение при неправильном вводе вполне допустимо.

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