包级实例方法与公共实例方法? java的

时间:2014-07-01 23:19:48

标签: java instance getter

所以我想说我有一个名为Person的课程:

public class Person {

    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    String getName() {
        return this.name;
    }

    int getAge() {
        return this.age;
    }

}

对于getName()和getAge()方法,我应该使用public修饰符,还是只将它们保存为包级实例方法?如果我有一个类的void方法怎么办?我会将其保留为包级实例方法,还是应该将其设置为公开?

1 个答案:

答案 0 :(得分:0)

您的方法的可见性取决于您的程序设计完全以及您想要的公共API。因此,返回类型以及方法是否为实例/静态对于您的方法是否应该是公共的没有影响。因此,没有直截了当的答案。

  

对于getName()getAge()方法,我应该使用public修饰符,还是将它们保留为包级实例方法?

现在,我猜测关于你希望你的Person类如何工作,但假设这是一个任何人都可以使用的类是不合理的,你希望任何人都能看到Person的年龄和名字。因此,使用public可能是有意义的。

  

如果我有一个类的void方法怎么办?我会将其保留为包级实例方法,还是应该将其设置为公开?

这取决于完全该方法是什么。返回类型无关紧要


我认为一个好的经验法则是公开行为,而不是实现。您希望公共API描述您的对象能够执行的行为。您希望公开 这些行为的实现方式,因为这意味着有人可能会依赖该实现,从而限制您以后更改实施的能力。对于小型项目来说,这不是什么大问题,但对于大型项目来说,这变得更加重要。

以下是Joshua Bloch的 Effective Java,2nd edition 的一些选择,第13项:

  

将设计良好的模块与设计不良的模块区分开来的最重要因素是模块隐藏其内部数据的程度以及其他模块的其他实现细节。精心设计的模块隐藏了其所有实现细节,将其API与其实现完全分离。模块然后只通过他们的API进行通信,并且忘记了彼此的内部工作。

     

经验法则很简单:使每个班级或成员尽可能无法访问。换句话说,使用与您正在编写的软件的正常运行一致的最低访问级别。

     

总而言之,您应该尽可能地减少可访问性。在仔细设计了最小的公共API之后,您应该防止任何杂散类,接口或成员成为API的一部分。

Bloch更详细,但这些是一些要点。我强烈建议读一读这本书;在那里你可以找到更多有用的建议。