假设我在一个类中有一个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方法返回一个只读列表。
我见过很多次scala代码使用Option(对于简单值)或[List[Error],T]来处理错误。 这为这样的代码提供了位置 这会产生一个不太好的代码嵌套,迫使您处理每一步的失败,并迫使您让所有函数返回一个[...] 所以我想知道 > 在scala(或一般的函数式编程)中不鼓励使用异常 使用它们有任何缺点(关于不可变性或代码并发性) 异常与原理或函数式编程有些冲突 你可以想出一个更好的方法来编写
问题内容: 如果使用Sun的专有Java类,则编译器将显示警告。我认为使用这些类通常不是一个好主意。我在某处阅读过。但是,除了警告之外,还有其他根本原因不建议您使用它们? 问题答案: 因为它们是内部API,所以它们可能会以未记录或不受支持的方式进行更改,并且已绑定到特定的JRE / JDK(在您的情况下为Sun),从而限制了程序的可移植性。 尽量避免使用此类API,请始终偏爱公开记录和指定的类。
我有一个枚举: 在枚举成员之间使用方法检查“层次结构”有什么问题吗?我的意思是-当有人将来可能会意外更改顺序时,使用它排除冗长是否有任何缺点。 还是这样做更好:
这在本质上不像那样工作吗?使用它甚至是好的实践吗?这让我很不安。
我有一个IntentService,它使用TimerTask每隔45秒在OnHandleContent中调用webservice。 我的问题是:我正在调用应用程序启动IntentService,而在OnHandleIntent中,由于TimerTask,任务不断重复。。这样做是一种好做法还是有任何缺点?我应该在我的活动中使用报警管理器每次调用intent service,还是继续使用timer任务
我必须编写一些代码,将Java8流的内容多次添加到列表中,我很难找到最好的方法。根据我在SO上读到的内容(主要是这个问题:如何将Java8流的元素添加到现有列表中)和其他地方,我将其缩小到以下选项: PS:在我的示例代码中,我使用作为需要在流上执行的任何操作的占位符