使用Java中的getter方法将元素添加到List是一种不好的做法吗?
问题内容:
假设我在一个类中有一个private ArrayList
或一个LinkedList
内部,我将永远不会为其分配新的引用,换句话说,这将永远不会发生:
myLinkedList = anotherLinkedList;
这样我就不需要使用setMyLinkedList(anotherLinkedList)
。
但!我需要向其中添加元素,或从中删除元素。
-
我应该写一种新的
setter
只,做的任务adding
,而不是setting
像myLinkedList.add(someElement)
? -
还是可以通过使用来做到这一点
getter
,而不违反Encapsulation
主体?
getMyLinkedList().add(someElement)
(+假设如果我不遵守封装规范,我将失去商标:-“)
问题答案:
我认为做这样的事情不是一个特别好的做法:
myObj.getMyList().add(x);
因为您是以非只读方式公开私有类变量的,所以我确实经常看到它(我正在看着您,自动生成的类)。我会争辩说,不是这样做,而是返回一个不可修改的列表,并允许该类的用户通过显式方法添加到列表中:
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中使用该行代码,例如public void
setter(someElement){this.myLinkedList.add(someElement);}
如果我正确理解您的意思,是说您要公开仅添加到列表中的方法。总体而言,这是我认为您应该为之奋斗的目标,而且很多人都在回答中概述了这些内容,但是,由于您没有重新分配(设置)任何东西,因此将其标记为二传手会产生误导。那,我强烈建议您尽可能从getter方法返回一个只读列表。