Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 公共财产不好的现实例子_Java_Oop_Conventions - Fatal编程技术网

Java 公共财产不好的现实例子

Java 公共财产不好的现实例子,java,oop,conventions,Java,Oop,Conventions,我无数次地读到,类上的公共属性是一个主要的失礼行为,但我不明白为什么在未进行转换的数据上进行输入/输出 我要写的东西的例子 public class Employee { public String firstName; public String lastName; private int ssn = 0; public boolean setSsn(String s) { //makes perfect sense why someth

我无数次地读到,类上的公共属性是一个主要的失礼行为,但我不明白为什么在未进行转换的数据上进行输入/输出

我要写的东西的例子

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;
    }       
}

请提供一个场景,其中这将导致问题,请具体说明,而不是“因为其他人使用您的代码时它会导致问题”为什么?为什么会引起问题。提前感谢您的建设性批评和详细回答:D

假设您的代码已经投入生产。我编写了一个前端,使用直接访问
firstName
lastName
的Employee类

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

你打算在哪里添加它?你必须将字段设置为私有并添加set方法,这将迫使我和其他使用你的代码的人重新编写我们的应用程序


如果您首先正确封装了这些数据,那么我们所要做的就是使用新版本的库和您的代码重新编译。

想象一下,您的代码已经投入生产。我编写了一个前端,使用直接访问
firstName
lastName
的Employee类

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

你打算在哪里添加它?你必须将字段设置为私有并添加set方法,这将迫使我和其他使用你的代码的人重新编写我们的应用程序



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

如果您想在设置firstName时对其进行错误检查,该怎么办?或者在设置后将其锁定。您的set方法中没有任何这种逻辑,因此您的示例不需要它,但在某些情况下,您可能需要这种逻辑。
employee.firstName=“\n”employee.firstName=“\n”