假设我在一个类中有一个 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/