gpt4 book ai didi

java - 如果在 Java 中输入无效则异常。例如年龄

转载 作者:行者123 更新时间:2023-11-29 10:08:57 25 4
gpt4 key购买 nike

我想抛出一个异常,让用户知道输入的年龄值应该在 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());
}
}

最佳答案

原则上,你在这里做的是一个 design by contract 的实例。 : 您正在为您的方法定义一个前提条件。

A) 条件错误

你的条件不对。你想在完全相反的情况下抛出异常:

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

(@Nikolas 在之前的帖子中也指出了这一点)

B) 明确契约(Contract)设计

我会通过提供一个断言方法来明确这一点:

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's Guava ):

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;
}

关于java - 如果在 Java 中输入无效则异常。例如年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com