假设我在一个类中有一个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方法返回一个只读列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句