java class 中集合属性和对象属性的 getter 和 setter 的最佳实践
Best practice for getters and setters for collection properties and object properties in a java class
我有以下实现
public class PartGroup {
private Part iPart;
private ArrayList<Part> iParttList;
public Part getPart() {
return iPart;
}
public void setPart( Part aPart ) {
iPart = aPart;
}
public ArrayList<Part> getParttList() {
return iParttList;
}
public void setParttList( ArrayList<Part> aParttList ) {
iParttList = aParttList;
}
}
可以为 iParttList 和 iPart 使用 setter 吗?
我认为使用 getter 是安全的,只有这样消费者才能使用 getter 来获取创建的集合实例并清除或向集合中添加元素
我应该删除 setter 并添加以下实现
public ArrayList<Part> getParttList() {
if(iParttList == null)
iParttList = new ArrayList<Part>();
return iParttList;
}
public Part getPart() {
if(iPart == null)
iPart = new Part();
return iPart;
}
最佳做法是什么?
您的原始实现似乎是 getter 和 setter 的标准实现。您认为为什么需要将其重新排列到第二个代码块?
第二个实现防止 returning null,对吧?因此,如果这个对象有可能 return null(因为那里的构造函数允许这个或它可能会通过)并且这对于您的预期用例来说是一件坏事,那么请使用第二个实现。
正如我们所见,一旦您创建了 PartGroup 的实例,您就没有创建列表的构造。
我认为:
如果您有创建 Part 对象列表的构造,并且如果您想限制消费者通过 setter 更改或创建列表,那么我认为最好不要 setter
但是,如果您没有创建 Part 对象列表的构造函数,那么 setter 是创建 Part 对象列表的唯一方法。
从我的角度来看,第二种实现似乎更好。它确保列表在任何情况下都不为空。它还有助于减少检查列表是否为空的重复代码。最后,调用 public void setParttList( ArrayList<Part> aParttList )
可能会有风险,因为它可能会设置一个新列表,即使已经存在一个列表。
我有以下实现
public class PartGroup {
private Part iPart;
private ArrayList<Part> iParttList;
public Part getPart() {
return iPart;
}
public void setPart( Part aPart ) {
iPart = aPart;
}
public ArrayList<Part> getParttList() {
return iParttList;
}
public void setParttList( ArrayList<Part> aParttList ) {
iParttList = aParttList;
}
}
可以为 iParttList 和 iPart 使用 setter 吗? 我认为使用 getter 是安全的,只有这样消费者才能使用 getter 来获取创建的集合实例并清除或向集合中添加元素 我应该删除 setter 并添加以下实现
public ArrayList<Part> getParttList() {
if(iParttList == null)
iParttList = new ArrayList<Part>();
return iParttList;
}
public Part getPart() {
if(iPart == null)
iPart = new Part();
return iPart;
}
最佳做法是什么?
您的原始实现似乎是 getter 和 setter 的标准实现。您认为为什么需要将其重新排列到第二个代码块?
第二个实现防止 returning null,对吧?因此,如果这个对象有可能 return null(因为那里的构造函数允许这个或它可能会通过)并且这对于您的预期用例来说是一件坏事,那么请使用第二个实现。
正如我们所见,一旦您创建了 PartGroup 的实例,您就没有创建列表的构造。
我认为:
如果您有创建 Part 对象列表的构造,并且如果您想限制消费者通过 setter 更改或创建列表,那么我认为最好不要 setter
但是,如果您没有创建 Part 对象列表的构造函数,那么 setter 是创建 Part 对象列表的唯一方法。
从我的角度来看,第二种实现似乎更好。它确保列表在任何情况下都不为空。它还有助于减少检查列表是否为空的重复代码。最后,调用 public void setParttList( ArrayList<Part> aParttList )
可能会有风险,因为它可能会设置一个新列表,即使已经存在一个列表。