Java封装&数组

标签 java

返回数组内容的副本而不是直接引用是否会提高类的封装性?我想知道这是否被认为是最佳做法。

最佳答案

如果我没理解错的话,你是在尝试封装一个集合。如果您提供直接引用,则不会对集合进行封装。用户可以对集合做任何他们想做的事情——甚至可以将它设置为 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/

相关文章:

java - JSP 名称参数作为字符串动态显示在同一 JSP 页面中

java - 在单独的行上使用 toString() 方法返回 Java 中集合的元素

java - 如何在Java项目中使用*.jar文件?

java - 如何让 Jenkins 将我的项目部署到 JBoss EAP(AS7)

java - 如何使用带有 Java 的 Selenium WebDriver 查找损坏的链接

java - 在 Android 上访问原始 GPS 数据

java - 我应该改变什么来优化替换方法?

java - 关于finally block 的一些异常和作用

Java-查找某段文字,然后在其后写一段文字

带有移动和 Web 客户端的 Amazon Web Services 上的 Java 应用程序