返回数组内容的副本而不是直接引用是否会提高类的封装性?我想知道这是否被认为是最佳做法。
最佳答案
如果我没理解错的话,你是在尝试封装一个集合。如果您提供直接引用,则不会对集合进行封装。用户可以对集合做任何他们想做的事情——甚至可以将它设置为 null。如果您向用户提供集合的深拷贝,那么当他们修改该副本时,他们不会修改您类(class)中的集合。
最佳做法是通过从不向用户提供对集合的引用来封装整个集合。相反,他们将通过类方法与它交互。如果他们需要遍历整个集合,那么最好在集合上返回一个迭代器,这将提供对它的只读访问。
例如,我们有一个 BookCollection 类,它有一个私有(private)列表作为数据成员。如果我们希望代码的消费者能够添加和删除书籍等,我们将为他们提供执行此操作的方法。
这是我的示例代码:
public class BookCollection {
private List<Book> books;
public BookCollection() {
this.books = new ArrayList();
}
public void addBook(Book book) {
this.books.add(book);
}
public void removeBook(Book book) {
this.books.remove(book);
}
public Book get(int index) {
return this.books.get(index);
}
// etc.
public Iterator<Book> getIterator() {
return this.books.iterator();
}
}
关于Java封装&数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166747/