java - 在 Java 中使用 getter 方法将元素添加到 List 是一种不好的做法吗?

标签 java encapsulation getter-setter

假设我在一个类中有一个 private ArrayList 或一个 LinkedList,我永远不会为它分配新的引用,或者换句话说,这永远不会发生:

myLinkedList = anotherLinkedList;

这样我就不需要使用 setMyLinkedList(anotherLinkedList)

但是!我需要向其中添加元素或从中删除元素。

  • 我是否应该编写一种新的 setter 来完成 adding 而不是 setting 的任务,比如 myLinkedList.add(someElement)?

  • 或者在不违反封装 原则的情况下,使用getter 可以做到这一点吗?

    getMyLinkedList().add(someElement)

( + 如果我不遵守封装,我将失去我的标记:-")

最佳答案

我不认为做这样的事情是一个特别好的做法:

myObj.getMyList().add(x);

因为您以非只读方式公开私有(private)类变量,但话虽如此,我确实经常看到它(我在看您,自动生成的类)。我会争辩说,与其那样做,不如返回一个不可修改的列表,并允许该类的用户通过显式方法添加到列表中:

public class MyClass{
    private final List<String> myList = new ArrayList<String>();

    public List<String> getList(){
        return Collections.unmodifiableList(this.myList);
    }

    public void addToList(final String s){
        this.myList.add(s);
    }
}

编辑 在查看了您的评论后,我想补充一点关于您的 setter 想法:

I meant using that line of code inside a new kind of setter inside the class itself, like public void setter(someElement){this.myLinkedList.add(someElement);}

如果我没理解错的话,你是说你想公开一个只会添加到你的列表中的方法。总的来说,这就是我认为你应该追求的目标,以及许多人在答案中概述的内容,但是,将其标记为 setter 有点误导,因为你没有重新分配(设置)任何东西。那,如果可能的话,我强烈建议从您的 getter 方法返回一个只读列表。

关于java - 在 Java 中使用 getter 方法将元素添加到 List 是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33529415/

相关文章:

java - 我怎么知道 ThreadPoolExecutor 中的线程已经完成?

java - SecureRandom 应该用作单例还是每次生成随机数时都应该创建一个新对象?

unit-testing - 如何在不破坏封装的情况下使用依赖注入(inject)?

javascript - 如何在不返回 Promise 的情况下从对象的 `get()` 获取异步数据

java - 为什么java.awt.Graphics类在java中是抽象的?

java - 对数组进行排序并使用二分查找

java - 如何使用封装的相同方法实现多个子类?

c++ - 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?

ios - 如何使 Xcode 5 自动为 .m 中定义的属性的 Setters 和 Getters 生成代码?

java - 当有 getter 时,Hibernate 是否总是需要一个 setter?