java – 返回不可变列表
我正在创建一个名为Question的课程.这个类有答案,所以我希望能够返回附加到它的答案列表.
但是,如果用户对答案进行了更改,我希望用户调用更新方法,以便我可以进行其他验证等.现在,如果用户获得答案列表,他仍然可以通过说问题更改答案. ().get(0).setDescription(“BLAH BLAH”). 所以我想回复每个答案的副本,让用户改变这个,他必须将它合并/更新回问题.通过这种方法,我可以确保答案是有效的,但答案的equals方法是基于描述和正确的字段而不是id字段,因为我使用JPA.如果用户使用此方法更改答案,则更新方法将找不到答案,因为说明字段已更改且不再相等,因此在列表中找不到它. 有什么建议吗? public void updateAnswer(Answer answer) { int index = answers.indexOf(answer); answers.set(index,answer); } public List<Answer> getAnswers() { return Collections.unmodifiableList(answers); } @Test public void shouldUpdateAnswerInQuestion() { // Get first answer,make an update on the description // and then update answer on question. Answer answerThatWillBeUpdated = question.getAnswers().get(0); String updatedAnswerDescription = "Hey,it is now updated!"; answerThatWillBeUpdated.setDescription(updatedAnswerDescription); question.updateAnswer(answerThatWillBeUpdated); // After updating check that the answer in the list is equal // to the answer updated. Answer answerFromList = question.getAnswers().get(0); assertEquals(answerThatWillBeUpdated,answerFromList); } 答案类: public class Answer { private long id; private String description; private Boolean correct; ... } 解决方法
您应该重新考虑您的应用程序设计,但由于我不确定您的域限制是什么,我不能建议稍微重新设计或任何类型.
一个简单明了的答案是:程序到界面,而不是实现.如果要在修改setter之后强制调用update方法,请考虑使用Decorator模式. >创建一个界面 然后,您只需将所有方法委托给内部实例,并将要调用的方法委托给update,请执行以下操作: public void setField(int a){???innerInstance.setField(一);???更新(…);} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- cmd.exe powershell HashTable
- Java Netbeans项目中的哪些文件应置于版本控制之下?
- 生成具有严格限制的随机字符串的算法 – Java
- Java Set.add()方法:向Set集合添加对象
- Android自定义圆角ImageView
- java用split分割字符串的一个有趣现象
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万
- java – Camel路由单元测试结果FailedToCreateRouteExcepti
- Java – 添加到Lambda表达式中的字符串
- java – getResourceAsStream()返回内容为空的流