每次我创建一个具有集合属性的对象时,我都会以最好的方式来回去做?
如果集合是一个数组(即objList.Clone())而不是List,它会有所不同吗?
如果返回实际集合作为引用是如此糟糕,因为它创建依赖项,那么为什么返回任何属性作为引用?每当您将子对象作为引用公开时,除非父级具有属性更改事件,否则可以在父级"知道"的情况下更改该子对象的内部.是否有内存泄漏的风险?
并且,不要选项2和3打破序列化?这是一个catch 22还是你必须在有集合属性的时候实现自定义序列化?
通用的ReadOnlyCollection似乎是一般用途的一个很好的折衷方案.它包装IList并限制对它的访问.也许这有助于内存泄漏和序列化.然而,它仍然有枚举问题
也许它只是取决于.如果您不关心集合是否被修改,那么只需将它作为公共访问器公开在每个#1的私有变量上.如果您不希望其他程序修改集合,那么#2和/或#3会更好.
问题隐含的是为什么一种方法应该用于另一种方法,以及对安全性,内存,序列化等的影响是什么?
我知道在通用出来之前就会问这个问题.在Array强制执行返回类型的情况下,Array确实胜出了一些,它更加类型安全.
但是现在,使用最新的JDK 7,每次我设计这种类型的API时:
public String[] getElements(String type)
vs
public List<String> getElements(String type)
Run Code Online (Sandbox Code Playgroud)
我总是在努力想出一些很好的理由来回归一个阵列或者其他方式.在选择String []或List作为API的返回类型时,最佳做法是什么?或者它是马的课程.
我脑子里没有特殊情况,我更希望找到一个通用的利弊比较.
我们有相当多的代码只是跳转到Java 5.我们一直在那些针对Java 5版本发布的组件中使用泛型,但剩下的代码当然是充满原始的类型.我已经设置编译器为原始类型生成错误并开始手动清除它们,但是按照目前的速率,它需要很长时间才能完成它(大约有2500个错误).这是Eclipse的有用的Infer Generic Type快速修复,它总是摆脱错误,但经常生成需要进一步工作的代码.
有没有更好的方法来处理这个?有没有比Eclipse更好的自动化工具?有没有办法将重构应用于所有出现而不是一个一个地进行重构?或者你只是忽略警告?