Java对象设置属性默认值

标签 java

class AStudent {
    private String name;
    public int age;
    public void setName(String inName) {
        name = inName;
    }

    public String getName() {
        return name;
    }
}
public class TestStudent2 {
    public static void main(String s[]) {
        AStudent stud1 = new AStudent();
        AStudent stud2 = new AStudent();
        stud1.setName("Chan Tai Man");
        stud1.age = 19;
        stud2.setName("Ng Hing");
        stud2.age = -23;
        System.out.println("Student: name="+stud1.getName()+
                           ", age=" + stud1.age);
        System.out.println("Student: name="+stud2.getName()+
                           ", age=" + stud2.age);
    }
}

如何通过向 age 属性添加数据封装来增强 AStudent 类。如果输入的年龄无效,我想打印一条错误消息并将年龄设置为18。

最佳答案

首先,修改age,使其不公开。然后添加访问器和修改器方法(在修改器中,检查无效值 - 并将其设置为 18)。比如,

private int age;
public int getAge() {
    return age;
}
public void setAge(int age) {
    if (age < 0) {
        System.err.println("Invalid age. Defaulting to 18");
        age = 18;
    }
    this.age = age;
}

然后你可以将它与 setName 之类的东西一起使用

stud1.setAge(19);

stud2.setAge(-23);

您可以通过覆盖 AStudent 中的 toString 使其更容易显示,例如

@Override
public String toString() {
    return String.format("Student: name=%s, age=%d", name, age);
}

然后您可以打印您的 AStudent 实例,例如

System.out.println(stud1); // <-- implicitly calls stud1.toString()
System.out.println(stud2);

关于Java对象设置属性默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33591750/

相关文章:

java - GWT 的 @JsType - 我需要使用它做什么?

Java NIO read() 流结束

java - Java中如何实现重叠继承?

Java 数据库访问构建器模式

JavaFX 2 按钮大小填充宽度和每个相同的宽度?

java - Mockito 对于不同的参数值返回相同的结果

java - TCL中使用Blowfish的默认参数

java - Squirrel SQL 在 SQL View 中呈现闪烁

java - 在 OneToMany 和 ManyToMany 映射中获取 StackOverflow

java - 如何在 Android 测试中创建模拟服务?