[英]Java safe return type container
我每天都是c ++开发人员,并且习惯于const返回类型的约定。 我知道在Java中没有类似的工具。
我有一个特定的情况,想知道最适合我的任务的不可变集合。 在C ++中,我只会使用std :: vector。
我有一个WavFile类,当前有一个float []数据,我想用一些不可变的东西代替它。
关于容器的一些重要规定是,容器的大小在创建时就已知,并且根本不需要动态增长或收缩。 其次,索引到容器应该是O(1)。
最重要的是,就像该主题所暗示的那样,我希望能够有一个可返回此容器不变版本的吸气剂。
我要寻找的容器类型是什么? 这是Java中可能的吗?
如果可以忍受拳击费用,那么Collections.unmodifiableList()
或Guava ImmutableList
将起作用。
如果不是,请尝试Trove ,它提供了TFloatArrayList
以及使它们不可修改的简单方法 。
恕我直言,最好通过设计解决问题。 返回一个集合或数组,即使它是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”,其数据点是通过某些公式动态生成的,等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.