当前位置: 首页 > 知识库问答 >
问题:

Java9-列表类:的()重载方法varargs[重复]

蒯硕
2023-03-14

在Java 9中,在列表界面下,有一个新的()方法,根据Java文档:

名单。of()静态工厂方法提供了一种创建不可变列表的方便方法。

共有1个答案

岑熙云
2023-03-14

这样做是出于性能原因。

首先,空、一个元素和两个元素列表被实现为专用类,没有嵌套对象。因此,构建它们是最快的(只涉及一个分配)。

至于更高的“特性”,界面设计者可能想保持他们的选项开放,以可能实现更多的“固定特性”列表类(尽管他们还没有遵循这条路线)。

因此,实际上,“更高的arity”重载被包装回“varargs”列表构造函数中。

参考:https://github.com/dmlloyd/openjdk/blob/7d7fbd09fcfd7f8cd02bf76ce10433ceeb33b3cf/jdk/src/java.base/share/classes/java/util/List.java#L788

 类似资料:
  • 我正在研究集合的工厂方法。我看到方法有10个varargs重载(与相同)。我真的不明白为什么有这么多。最后,函数

  • 问题内容: 以下代码无法编译。 发出编译时错误。 对test的引用是模棱两可的,varargspkg.Main中的方法test(int …)和varargspkg.Main中的方法test(float …) 这似乎很明显,因为方法调用中的参数值可以提升为 如果任何一个或两个参数都带有或作为后缀,则会进行编译。 但是,如果我们用相应的包装器类型表示方法签名中的接收参数,如下所示 那么对该方法的调用不

  • 我有两个重载的方法,分别是varargs int和long。当我运行一个传递整数的测试时,它似乎更喜欢varargs long方法。然而,如果我使这些方法是静态的并使用整数运行,它似乎更喜欢varargs int方法。这是怎么回事? 产出: 内长varargs 1 内部静态int varargs 1

  • 本文向大家介绍Java Varargs中的方法重载和歧义,包括了Java Varargs中的方法重载和歧义的使用技巧和注意事项,需要的朋友参考一下 在Java中使用变量参数时存在歧义。发生这种情况是因为两种方法绝对可以有效地被数据值调用。因此,编译器不知道该调用哪种方法。 示例 输出结果 名为Demo的类定义了一个名为“ my_fun”的函数,该函数采用可变数量的浮点值。使用“ for”循环将这些

  • 通常,具有固定参数数的方法优于具有可变参数数的重载方法。但是,该示例的行为不同: 输出: main的第三行用一个参数调用该方法,该参数是一个包含两个元素的字符串[]。但这并不是用一个参数执行方法,而是执行varargs方法,就像我给了它两个参数一样(这有点正常,因为它是一个数组)。 现在的问题是:这应该发生吗?我是否发现了错误或未记录的行为?它这样做的原因是什么? 我为什么这么做:我想做一个快捷方

  • J.Bloch在《Effective Java》中提到,将varargs方法与基元类型一起使用是不安全的。简而言之,的返回类型为,这听起来很合理。现在我试图自己复制这种行为,但做不到: 我的问题是,为什么类型被推导为,而不是像他所说的那样被推导为?这是否意味着,在Java8中,关于varargs的问题不再相关了,如果我们不太关心性能,我们可以在任何地方安全地使用它们。