繁体   English   中英

Java安全返回类型容器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM