So I have a question on "setter" and "getter" methods and how useful they are or aren't.
Let's say I just write a very basic program like the following:
public class Account
{
String name;
String address;
double balance;
}
Then, let's say I write another class that uses this "Account" class, like the following:
class UseAccount
{
public static void main(String[] args)
{
Account myAccount = new Account();
Account yourAccount = new Account();
myAccount.name = "Blah blah"
}
}
etc., etc.
When I write myAccount.name = "Blah blah"
, I am changing the value of the variable "name" in the "Account" class. I am free to do this as many times as I like with the code written the way it is. It has come to my attention, however, that it's better practice to make the variables in the "Account" class private, and then use "setter" and "getter" methods. So if I write the following:
public class Account
{
private String name;
private String address;
private String balance;
public void setName(String n)
{
name = n;
}
public String getName()
{
return name;
}
}
I can still change the value of the variable "name" by just creating another class that has something like:
class UseAccount
{
public static void main(String[] args)
{
Account myAccount = new Account();
myAccount.setName("Blah blah");
}
}
I don't understand how using this method is any different or is supposed to prevent people form changing the value of a private field. Any help?
With trivial accessor methods, there is no difference except style, but you can also execute code with them, for example:
public void setName(String name) {
if (name == null) {
throw new IllegalArgumentException("Name may not be null");
}
this.name = name;
}
You can also return copies from a getter, thus protecting your data:
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
}
These are just two simple examples, but there are limitless examples of how accessor methods can be used.
It is better to follow a consistent style, so that's why we always use getters/setters - so code this like may be executed if needed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With