【发布时间】:2016-06-20 15:11:49
【问题描述】:
我无数次读到一个类的公共属性是一个主要的错误,但我不明白为什么在没有被转换的数据上输入/输出。
我会写的例子
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 时对其进行错误检查怎么办?或者设置好后锁定。您的 set 方法中没有任何逻辑,因此您的示例不需要它,但在某些情况下您可能需要该逻辑。
-
employee.firstName = "\n"; -
不是公共属性不好,而是公共 fields 打破了封装,允许在类不知情的情况下更改数据。如果您不关心字段中的值,那没什么大不了的。但是,如果您依赖它们存在或在其他方法中具有某些值,则无法通过字段强制执行此操作。
-
除了@FelixCastor 所说的,您可能不需要检查字段值...现在。但是,如果您需要在以后的版本中检查它怎么办? :)
-
@assylias - 今天的普通设置器明天可以更改,而不会影响外部调用者。公共领域不能。它们在 Java 中是不等价的。
标签: java oop conventions