设计 getter 和 setter 的最佳方法是什么?为什么?
What is the best way to design getters and setters and why?
我想知道编写 getter 和 setter 的最佳方式是什么?
我们应该在 getter 中检查条件还是应该在 setter 中检查?
这样做的标准程序是什么?为什么?
假设我有一个class产品:(这只是一个例子,只问设计getters和setters的方法)
public class Product {
private String productName;
public String getProductName() {
if (productName != null || !productName.equals("")){
return productName;
}else {
return "Product Name Not found";
}
}
public void setProductName(String productName) {
String productName2 = productName;
if (productName != null || !productName2.equals("")){
this.productName = productName;
}else {
this.productName = "Product Name Not found";
}
}
}
建议:
public class Product {
private String productName;
public Product(String productName) {
this.productName = productName;
}
public String getProductName() {
return this.productName;
}
public void setProductName(String productName) {
this.productname = productName;
}
理由:
一般来说,成员数据应该是私有的(例如:"private String productName")
如果"outsiders"需要读取成员,提供getter方法。
如果"outsiders"需要修改成员,提供"setting"方法。将验证码添加到您的 setter 是合适的。如果验证失败,抛出异常通常是一个好习惯。
一般来说,如果你可以在构造函数中初始化一些东西,你应该。更具体地说,"constructor" 的目的是为 class.
建立“invariant conditions”
'希望对您有所帮助!
备注:
如果您正在编写一个 Java Bean,您可能需要一个 "no args" 构造函数。在那种情况下,添加一个"init()"方法来代替我上面描述的构造函数。
一次初始化多个成员是非常合适的 - 无论是在您的构造函数中,还是在自定义 "init()".
在setter。 getter 已经太晚了。尽快捕获错误。 使它成为一个错误,而不仅仅是“我不知道”的情况:你永远不应该允许对象进入无效状态。
public class Product {
private String productName;
public Product(String productName) {
setProductName(productName); // for validation
}
public String getProductName() {
return this.productName;
}
public void setProductName(String productName) {
if (productName == null || productName.length() == 0)
throw new IllegalArgumentException("product name cannot be null or empty");
this.productname = productName;
}
我想知道编写 getter 和 setter 的最佳方式是什么?
我们应该在 getter 中检查条件还是应该在 setter 中检查?
这样做的标准程序是什么?为什么?
假设我有一个class产品:(这只是一个例子,只问设计getters和setters的方法)
public class Product {
private String productName;
public String getProductName() {
if (productName != null || !productName.equals("")){
return productName;
}else {
return "Product Name Not found";
}
}
public void setProductName(String productName) {
String productName2 = productName;
if (productName != null || !productName2.equals("")){
this.productName = productName;
}else {
this.productName = "Product Name Not found";
}
}
}
建议:
public class Product {
private String productName;
public Product(String productName) {
this.productName = productName;
}
public String getProductName() {
return this.productName;
}
public void setProductName(String productName) {
this.productname = productName;
}
理由:
一般来说,成员数据应该是私有的(例如:"private String productName")
如果"outsiders"需要读取成员,提供getter方法。
如果"outsiders"需要修改成员,提供"setting"方法。将验证码添加到您的 setter 是合适的。如果验证失败,抛出异常通常是一个好习惯。
一般来说,如果你可以在构造函数中初始化一些东西,你应该。更具体地说,"constructor" 的目的是为 class.
建立“invariant conditions”
'希望对您有所帮助!
备注:
如果您正在编写一个 Java Bean,您可能需要一个 "no args" 构造函数。在那种情况下,添加一个"init()"方法来代替我上面描述的构造函数。
一次初始化多个成员是非常合适的 - 无论是在您的构造函数中,还是在自定义 "init()".
在setter。 getter 已经太晚了。尽快捕获错误。 使它成为一个错误,而不仅仅是“我不知道”的情况:你永远不应该允许对象进入无效状态。
public class Product {
private String productName;
public Product(String productName) {
setProductName(productName); // for validation
}
public String getProductName() {
return this.productName;
}
public void setProductName(String productName) {
if (productName == null || productName.length() == 0)
throw new IllegalArgumentException("product name cannot be null or empty");
this.productname = productName;
}