在最佳实践:始终返回一个____,而不是一个____的精神下,我在即将进行的从JDK1.4.2迁移到JDK5及更高版本中面临着类似的问题(是的,我知道JDK1.4.2已经停止更新了!;-))。
对于返回集合的函数(这些集合不是简单的属性集合),我总是更喜欢(在JDK1.4.2中)返回一个数组而不是一个通用列表,因为:
- 它强制执行返回类型(
当然,我总是创建这个返回的数组(我不会暴露任何“内部”数组)
现在,在JDK5及更高版本中,如果我想的话,我可以使用
对于返回集合的函数(这些集合不是简单的属性集合),我总是更喜欢(在JDK1.4.2中)返回一个数组而不是一个通用列表,因为:
- 它强制执行返回类型(
MyObject[]
而不是对象列表,更加静态--如编译--级别上更加类型安全)
- 它建议返回集合的“只读”特性(尽管这不像C#中的“只读”关键字那么严格,向集合添加元素更加复杂)。这并不意味着它是“不可变的”,因为数组内部的引用仍然可以被修改...当然,我总是创建这个返回的数组(我不会暴露任何“内部”数组)
现在,在JDK5及更高版本中,如果我想的话,我可以使用
List<MyObject>
。
在使用Java5编程时,为什么选择返回MyObject[]
而不是List或Collection<MyObject>
?
如果使用Collection<MyObject>
,是否可以:
- 强制返回的集合为只读属性?(无法
add()
或remove()
) - 强制返回的集合为不可变属性?(甚至该集合的引用也不能被修改)
注:JavaGenericFAQ中没有涉及此问题。