我有一个类维护类的功能列表。与读取相比,这些特征很少改变。读取几乎总是通过特征列表进行迭代。因此,我使用了 CopyOnWriteArrayList
。
我想要一个这样的函数:
function Feature[] getFeatures() {
.. implementation goes here ..
}
我承认,原因可能是有点懒。我想写这样的代码:
for (Feature f: object.getFeatures()) {
.. do something interesting ..
}
而不是这个:
Iterator<Feature> iter = object.getFeatureIterator();
while (iter.hasNext()) {
Feature f = iter.next();
.. do something interesting ..
}
主要问题是——我是不是懒惰了?我将大量遵循这种模式,而且我认为第一段代码更容易维护。显然,我永远不会更改底层数组,我会把它放在文档中。
处理这种情况的正确方法是什么?
最佳答案
只需在列表上调用 toArray 方法即可:
public Feature[] getFeatures() {
return this.featureList.toArray(new Feature[this.featureList.size()]);
}
请注意,foreach 语法可用于所有 Iterable 对象,而 List 是 Iterable,因此您可以只使用
public List<Feature> getFeatures() {
return this.features;
}
并使用相同的 foreach 循环。如果您不希望调用者修改内部列表,请返回一个不可修改的 ListView :
public List<Feature> getFeatures() {
return Collections.unmodifiableList(this.features);
}
关于java - 如何从 Java 中的 CopyOnWriteArrayList 中获取底层静态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190519/