我是Java的初学程序员,所以这可能听起来像一个简单而又相当愚蠢的问题:
在Java中,使用方法获取属性值或仅使用属性本身更好吗?
要了解我的意思,请从Oracle Java Tutorials关于Lambda Expressions的页面查看此示例:
processPersons(
roster,
p -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25,
p -> p.printPerson()
);
我只是想知道,当使用p.getGender()
和p.getAge()
时,使用p.gender
和p.age
会有什么用?它们不能具有多个值或任何可能阻止它们仅使用属性的值。 (p.printPerson()
很好,因为它可能打印出多个属性值。)
我的意思是,要运行上面的代码,他们需要有一个构造函数来分配属性和额外的方法,只是为了返回属性值,如下所示:
public class Person {
public String name;
public int age;
public String gender;
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
// assign some other properties for "printperson()" to print out
}
public String printPerson() {
return name; // and maybe return some other values
}
// need the methods below just to return property values??? are they unnecessary??
public String getGender() {
return this.gender; // can't they use "p.gender" to get this value?
}
public int getAge() {
return this.age; // can't they use "p.age" to get this value?
}
}
我的一些推理是来自我有限的编程知识的假设,所以请纠正我,如果我错了。
是否有我遗漏的东西,使用方法获取属性值的原因?或者它只是用作例子?因为没有必要唤起方法并减慢程序速度似乎要简单得多。
任何想法都表示赞赏。
答案 0 :(得分:1)
参考: 有效Java项目14 在公共类中,使用访问器方法,而不是公共字段。
如果某个类可以在其包之外访问,则提供访问者 方法,保持更改类内部的灵活性 表示。如果一个公共类暴露其数据字段,所有希望 由于可以分发客户端代码,因此更改其表示将丢失 广泛的。