使用方法“getValue()”或获取属性“值”?

时间:2014-07-08 20:59:49

标签: java methods properties

我是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.genderp.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?
    }
}

我的一些推理是来自我有限的编程知识的假设,所以请纠正我,如果我错了

是否有我遗漏的东西,使用方法获取属性值的原因?或者它只是用作例子?因为没有必要唤起方法并减慢程序速度似乎要简单得多。

任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:1)

参考: 有效Java项目14 在公共类中,使用访问器方法,而不是公共字段。

  

如果某个类可以在其包之外访问,则提供访问者   方法,保持更改类内部的灵活性   表示。如果一个公共类暴露其数据字段,所有希望   由于可以分发客户端代码,因此更改其表示将丢失   广泛的。