小编chr*_*fin的帖子

为什么是 getAsPrimitive 和 applyAsPrimitive 而不是 get 和 apply?

这与为什么 Java 8 的 ToIntFunction 不扩展 Function<T, Integer> 相关

我觉得有点烦人的是, 的原始版本Optional和各种功能接口使用不同的方法名称,例如getAsInt()代替get()applyAsDouble(x, y)代替apply(x, y)。我想知道为什么他们不使用相同的方法名称。毕竟,所有流都使用mapfilterreduce等,而不管类型如何,这似乎很有意义。拥有doubles.filterDoubles(DoublePredicate)and似乎没有意义ints.reduceAsInt(IntBinaryOperator)。但是我们为什么要这样做ints.reduce(Integer::sum).getAsInt()呢?

特别是,注意到不对称性很有趣。两者ints.reduce(...).get()ints.reducePrimitive(...).getAsPrimitive()将是一致的。然而我们两者都没有。

我能想到的一个原因是想让继承成为可能。如果我们希望 anOptionalInt也成为 an Optional<Integer>,那么我们不能同时拥有 anint get()和 anInteger get()方法。因此,扩展Optional<Integer>,继承自动装箱方法,然后还添加一个额外的纯原始方法以避免性能自动装箱是有意义的。同样的想法也适用于函数。但正如上述问题所讨论的,原始函数接口不扩展泛型接口,原始 O​​ptional 类也不扩展。

有什么我没有看到的吗?会使用getapply破坏某些东西吗?或者这只是 API 中的偶然不一致,类似于String.length()vs List.size()?我想设计者可能希望在将来使用上述继承敞开大门。谁能想到另一个原因?

java

5
推荐指数
0
解决办法
72
查看次数

标签 统计

java ×1