根据Encapsulation字段应该是私有和公共getter-setters。
但是使用setter有一种方法可以让另一个类改变私有字段的值,那么保护字段的方法应该是什么。
请考虑本课程进行讨论:
class Emp {
private String name;
private int age;
public Emp() {}
// getters and setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
答案 0 :(得分:4)
你可以让这个类不可变。
不可变对象是指不会改变状态的对象 实例
final class Emp {
private final String name;
private final int age;
public Emp(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
使类最终确保此类不能被子类化。这个子类可能会增加可变性。
答案 1 :(得分:2)
如果您不希望其他课程通过设置者更改字段,则不要提供设置者。将setter声明为private
具有相同的效果。
你说:
根据Encapsulation字段应该是私有和公共getter-setters。
实际上,实现封装的关键要求是将字段声明为SidebarVCDelegate
。这就是阻止其他类看到""或取决于财产的实施方式。提供getter和/或setter是可选。
答案 2 :(得分:0)
当你需要setter时添加某种控件:
public void setName(String name) {
if (name == null) {
throw new IllegalArgumentException();
}
this.name = name;
}
使用java bean时,也可以使用角色:
@RolesAllowed("Administrator")
public void setName(String nam) {
...
}
答案 3 :(得分:0)
在构造函数中传递数据:
class Emp {
private String name;
private int age;
public Emp(String name, int age) {
this.name = name;
this.age = age;
}
// getters
public String getName() {
return name;
}
public int getAge() {
return age;
}
}