当前位置: 首页 > 面试题库 >

为什么在Java 8中有像DoubleFunction这样的原始函数

刘胜泫
2023-03-14
问题内容

我只是看了一下新的Java 8
函数包,想知道为什么会有类似的接口

  • DoubleFunction
  • IntFunction
  • LongFunction

这也 不会
延长Function。这是否意味着我将无法通过要求a的Function<T,Int>地方IntFunction<T>,反之亦然?这同样适用于*Block*Supplier*UnaryOperator

我看到的优点是,不必null在返回原语时进行检查,但是缺点列表似乎要长得多


问题答案:

此问题与以下事实有关:Java中的原始类型未统一为可替代Object,并且具有通用类型擦除。

使用Function<T, Integer>代替而不是IntFunction<T>最后一个满足时有两个缺点:

  • 每个返回的内容int都用盒装-意味着更大的内存占用;
  • 每个返回的内容Integer都会获得自动运行时检查(可以对其进行优化,但是是的。。。);

请注意,Java中的收集框架存在这类问题,导致人们编写了一个名为Trove的整个库,该库避开了通用接口,而支持每种原始类型的专用收集类型。



 类似资料:
  • 问题内容: 如果有Wrapper类使Java成为纯面向对象的语言,那么为什么会有可在Java中使用的Primitive数据类型呢? 问题答案: 为了效率。基本类型的变量直接包含值。非基本类型的变量是引用,引用存储在内存中其他位置的对象。 每次您需要使用包装器类型的值时,JVM都需要在内存中查找对象以获取该值。对于原始类型,这不是必需的,因为变量本身包含值,而不是对包含该值的对象的引用。 但是,这不

  • 问题内容: 我想知道为什么没有像这样的Locale参数。 我必须首先将任何语言的文本大写。我有2个解决方案: 用 用 对于我的语言环境。两种方式具有相同的结果。 我的问题是: 由于文本可以是任何语言。我应该使用哪种方式? 为什么没有Locale参数,因为String 之间没有太多区别,并且String是字符数组。 问题答案: 在Javadoc中, 通常,应将字符映射为大写。案例映射方法比案例映射方

  • 关于函数的Perl6网站说 强制类型可以帮助您在例程中拥有特定类型,但可以接受更广泛的输入。调用例程时,参数将自动转换为较窄的类型。 这里Int是参数将被强制的目标类型,Cool是例程接受作为输入的类型。 但潜艇的意义何在?不就是一个?为什么要限制调用者为参数实现? 这个例子让我倍感困惑,因为已经

  • 为什么x没有在下面初始化? 平均而言,对于一半的迭代,for循环中的将是,从而初始化。对于另一半,找到的 循环替换为 同样糟糕。只有

  • 问题内容: 在MySQL上,是否存在POSTGRESQL中的“ unnest”之类的功能? 查询(PSQL): 结果(如表所示): 问题答案: 简短答案 对的,这是可能的。从技术角度来看,您可以通过一个查询来实现。但是问题是-最有可能的是,您正在尝试将一些逻辑从应用程序传递到数据存储。数据存储旨在 存储 数据,而不是表示/格式化数据,或者甚至对其应用某些逻辑。 是的,MySQL没有数组数据类型,但

  • 问题内容: 为什么大多数其他数据类型都没有Java的String基本类型? 问题答案: 字符串是一个对象,根本不是原始类型,只是一个字符数组。James Gosling的访谈 摘录摘述了Java中根本存在原始类型的原因,这很有趣。 Bill Venners: Java为什么会有原始类型?为什么不是所有事物都只是一个对象? James Gosling: 完全是效率问题。有各种各样的人已经建立了以in