public 属性不良的真实示例

A real life example of public properties being bad

我无数次读到 public class 上的属性是一个主要的失礼,但我不明白为什么没有得到转换的数据 in/out.

我要写的东西的例子

public class Employee
{
    public String firstName;
    public String lastName;
    private int ssn = 0;
    public boolean setSsn(String s)
    {
        //makes perfect sense why something like an ssn would use a getter setter
        //some code to validate ssn
        if(!validSsn(s)){
            ssn = 0; 
            return false;
        }
        ssn = raw;
        return true;
    }
    public String getSsn()
    {
        return ssn;
    }
    private boolean validSsn(String s)
    {
        //validation goes here
        retrun val;
    }

    //I don't understand why I should make firstName private
    // and then write
    public void setFirstName(String s)
    {
        firstName = s;
    }
    public String getFirstName(String s)
    {
        return firstName;
    }       
}

请提供一个会导致问题的场景,请具体说明,而不是 "because it causes issues when other people use your code" 为什么?为什么会引起问题。在此先感谢建设性的批评和详细的回答:D

假设您的代码已投入生产。我编写了一个前端,使用您的员工 class 直接访问 firstNamelastName

6 个月过去了,现在有一个新的业务要求,您需要向名称字段添加验证。

你要添加到哪里?您将不得不将这些字段设为私有并添加设置方法,这将迫使我和其他使用您的代码的人重新编写我们的应用程序。

如果您一开始就正确封装了该数据,我们所要做的就是使用新版本的库和您的代码重新编译。