getter 和 setter 的目的是让您限制/扩展属性的范围或功能,彼此独立。
您可能希望您的“名称”属性在您的 PersonInfo 类之外是只读的。在这种情况下,您有一个 getter,但没有 setter。您可以通过构造函数传入只读属性的值,并通过getter检索该值:
public class PersonInfo
{
//Your constructor - this can take the initial values for your properties
public PersonInfo(String Name)
{
this.name = Name;
}
//Your base property that the getters and setters use to
private String name;
//The getter - it's just a regular method that returns the private property
public String getName()
{
return name;
}
}
我们可以使用 getName() 在这个类实例之外获取 'name' 的值,但是由于 name 属性是私有的,我们不能从外部访问和设置它。而且因为没有设置器,我们也无法更改此值,使其成为只读的。
作为另一个例子,我们可能想在修改内部值之前做一些验证逻辑。这可以在setter中完成,并且是 getter 和 setter 可以派上用场的另一种方式:
public class PersonInfo
{
public PersonInfo(String Name)
{
this.setName(Name);
}
//Your setter
public void setName(String newValue)
{
if (newValue.length() > 10)
{
this.name = newValue;
}
}
现在,如果我们要设置的值的长度大于 10,我们只能设置 'name' 的值。这只是一个非常基本的示例,您可能需要在那里进行错误处理,以防有人干扰无效值在你的方法中并在它不起作用时抱怨。
您可以对所需的所有值遵循相同的过程,并将它们添加到构造函数中,以便您可以初始设置它们。至于实际使用此模式,您可以执行以下操作来查看它的实际效果:
public static void main(String[] args)
{
PersonInfo myInfo = new PersonInfo("Slippery Sid",97,"male-ish");
var name = myInfo.getName();
System.out.printf("Your name is: " myInfo.getName() + " and you are a " myInfo.getSex());
myInfo.setName("Andy Schmuck");
System.out.printf("Your name is: " myInfo.getName() + " and you are a " myInfo.getSex());
}