Rya*_*man 4 java methods accessor
所以我对"setter"和"getter"方法有疑问,以及它们是否有用.
假设我只是写了一个非常基本的程序,如下所示:
public class Account
{
String name;
String address;
double balance;
}
Run Code Online (Sandbox Code Playgroud)
然后,假设我编写另一个使用此"帐户"类的类,如下所示:
class UseAccount
{
public static void main(String[] args)
{
Account myAccount = new Account();
Account yourAccount = new Account();
myAccount.name = "Blah blah"
}
}
Run Code Online (Sandbox Code Playgroud)
等等
当我写作时myAccount.name = "Blah blah",我正在更改"帐户"类中变量"name"的值.我可以自由地按照我喜欢的方式执行此操作.但是,我注意到,最好将"帐户"类中的变量设为私有,然后使用"setter"和"getter"方法.所以,如果我写下面的内容:
public class Account
{
private String name;
private String address;
private String balance;
public void setName(String n)
{
name = n;
}
public String getName()
{
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然可以通过创建另一个具有以下内容的类来更改变量"name"的值:
class UseAccount
{
public static void main(String[] args)
{
Account myAccount = new Account();
myAccount.setName("Blah blah");
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白使用这种方法有什么不同或者应该阻止人们改变私有领域的价值.有帮助吗?
使用简单的访问器方法,除了样式之外没有区别,但您也可以使用它们执行代码,例如:
public void setName(String name) {
if (name == null) {
throw new IllegalArgumentException("Name may not be null");
}
this.name = name;
}
Run Code Online (Sandbox Code Playgroud)
您还可以从getter 返回副本,从而保护您的数据:
private List<String> middleNames;
public List<String> getMiddleNames() {
return new ArrayList<String>(middleNames); // return a copy
// The caller can modify the returned list without affecting your data
}
Run Code Online (Sandbox Code Playgroud)
这些只是两个简单的例子,但是有关如何使用访问器方法的无限例子.
最好遵循一致的样式,这就是为什么我们总是使用getter/setter - 所以如果需要的话可以执行这样的代码.
试试这个面向对象编程的黄金法则.
1.创建私有实例变量.
2.创建公共 getter和setter以访问这些Instance变量.
3,这种方法被称为封装.虽然Encapsulation可以以不同的方式使用,但这在设计模式中很重要,就像那些不断变化的行为必须封装在抽象类或接口中.
4.现在好了回getter和setter的话题....
Getter和Setter有助于验证实例变量的输入.
例如: 假设我有一个方法来分配狗的年龄,现在年龄不能为负,如果我没有setter方法,那么我将无法验证年龄的输入.
private int age;
public void setDogAge(int age){
if (age>0){
this.age = age;
}
else{
System.out.println("Please Enter a Valid Age");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27862 次 |
| 最近记录: |