设计一个Person类,包括年龄、工资等个人隐私 信息(隐私信息不能随意被查看),并且对设置 的年龄进行验证,年龄合理就设置,年龄不合理 就赋一个默认值。 要求:年龄在1-120之间,工资不允许直接查看, 姓名的字符串长度在2-8之间
时间: 2024-09-27 12:15:03 浏览: 39
设计一个名为`Person`的类,我们可以这样实现:
```java
import java.util.regex.Pattern;
public class Person {
private String name;
// 使用内置的Integer类的MIN_VALUE和MAX_VALUE作为默认值
private int age = Integer.MIN_VALUE;
private double salary; // 实际上我们不会直接暴露salary变量,所以这里用private表示
// 构造函数,接受名字和年龄,并验证年龄
public Person(String name, int age) {
if (isValidName(name)) {
this.name = name;
} else {
throw new IllegalArgumentException("Name must be between 2 and 8 characters");
}
if (isValidAge(age)) {
this.age = age;
} else {
this.age = DEFAULT_AGE;
}
}
// 验证年龄是否在1到120之间,如果不在则返回默认值
private boolean isValidAge(int age) {
return age >= 1 && age <= 120;
}
// 验证名字的长度是否在2到8字符之间,正则表达式可以做到
private boolean isValidName(String name) {
Pattern pattern = Pattern.compile("\\w{2,8}");
return pattern.matcher(name).matches();
}
// 获取姓名,模拟私有属性访问
public String getName() {
return name;
}
// 设置工资,由于实际需求,这里不直接提供getSalary方法
// 如果需要获取工资,可以提供一个适当的理由,如年度评估后
public void setSalary(double salary) {
this.salary = salary; // 真实项目中可能会添加额外的安全措施
}
// 对外展示的年龄,如果是默认值则显示为合理范围内的最小值
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + (age == DEFAULT_AGE ? DEFAULT_AGE : age) +
'}';
}
// 其他方法...
// 定义一个常量作为默认年龄,比如18岁
private static final int DEFAULT_AGE = 18;
}
```
在这个类中,我们保护了年龄和工资这两个敏感字段,只通过构造函数和setSalary方法控制访问。同时,我们也实现了名字的长度检查。当试图获取或修改私人属性时,会抛出异常或显示默认值。
阅读全文