本着最佳实践的精神:总是返回一个____,而不是一个____,在我即将从 JDK1.4.2 迁移到 JDK5 等时,我面临着类似的问题。(是的,我知道,JDK1.4.2 已停产! ;-))。
对于返回集合的函数(不是简单的属性集合),我总是更喜欢(在 JDK1.4.2 中)返回 Array 而不是泛型 List,因为:
- 它强制返回类型(
MyObject[]
而不是对象列表,在静态上更加类型安全——如在“编译”——级别) - 它向返回的集合建议一个“只读”字符(将一个元素添加到集合中更复杂,即使这不像 c# 中的“只读”关键字那么严格)。这与说它是“不可变的”不同,因为数组内的引用仍然可以修改......
当然,我总是创建这个返回的数组(我不公开任何“内部”数组)
现在,在 JDK5 及更高版本中,我可以根据需要使用List<MyObject>
。
选择 returnMyObject[]
而不是 List 或Collection<MyObject>
在 java5 中编码的充分理由是什么?
如果使用奖金,是否Collection<MyObject>
可以:
- 对返回的集合强制执行只读属性?(没有
add()
或remove()
可能) - 对返回的集合强制执行不可变的方面?(即使该集合的引用也不能修改)
PS:JavaGenericFAQ没有那个。