【发布时间】:2011-02-05 16:21:33
【问题描述】:
我遇到了一个具有不可变属性的类:
MyObject[] allObjs
属性初始化如下:
List<MyObject> objs = createAllMyObjects();
allObjs = objs.toArray(new MyObject[objs.size()]);
当它通过访问器暴露时,它是作为一个列表完成的:
public List<MyObject> getAllMyObjects() {
return Collections.unmodifiableList(Arrays.asList(allObjs));
}
程序员为什么要这样做?有什么我不知道的好处吗?
性能不是问题,因为 obj 数组只会包含几十个元素。
我们好像在兜兜转转。
这个类是一种工厂,所以它有一个私有构造函数并且只公开静态方法(不确定这是否是疯狂的原因)。
编辑
我想我的问题是,“为什么不直接使用内部 List<MyObject> allObjs 而不是 MyObject[] allObjs,并返回 Collections.unmodifiableList(allObjs)?”因为这会完成同样的事情。
【问题讨论】:
-
也许原作者根本不知道他的替代方案?或者
getAllMyObjects()方法的要求是在使用数组实现之后出现的。 -
这看起来有点像侦探游戏,试图了解初衷。我猜这只是成为程序员的一部分。
-
MyObject[] allObjs 不能是不可变的,只有 final:这是一个巨大的差异。
标签: java arrays collections