我白天是c ++开发人员,我习惯了const返回类型的约定。我知道java中没有类似的设施。
我有一个特定的情况,并想知道我的任务最好的不可变集合。在C ++中,我只使用std :: vector。
我有一个当前有float []数据的WavFile类,我想用可能不可变的东西替换它。
关于容器的一些重要规定是它的大小在创建时是已知的,并且它根本不需要动态增长或缩小。其次,应该是O(1)来索引容器。
最重要的是,就像主题所暗示的那样,我希望能够拥有一个返回此容器的不可变版本的getter。
我要找的容器类型是什么?这是java中可能出现的吗?
答案 0 :(得分:2)
如果你能承受拳击费用,Collections.unmodifiableList()
或Guava ImmutableList
将有效。
如果没有,请尝试Trove,其中提供TFloatArrayList
和an easy way to make them unmodifiable。
答案 1 :(得分:0)
const
,仍然不能令人满意的OO设计,因为你暴露内部数据(尽管没有公开成员变量那样糟糕)。
您可以进一步考虑人们应该如何使用这些数据。
如果您希望人们只是遍历每个数据点,那么您可能会提供类似
的内容public class WaveFile {
public DoubleStream dataStream() {...}
public forEachDataPoint(DoubleConsumer consumer) {...}
}
如果您真的想让人们随机访问,您可以提供
public class WaveFile {
public float dataPointAt(int index) {...}
public DoubleStream dataStream(int fromIndex, int toIndex) {...}
}
这种封装避免了许多意外的数据使用方式,并为您在内部表示数据提供了很大的灵活性。例如,你可以从磁盘上的文件进行延迟加载,你可以制作一个" WaveFile"其中的数据点是通过某些公式等生成的。