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

Java9中便利工厂方法返回的特定集合类型

赵俊侠
2023-03-14

在Java9中,我们有方便的工厂方法来创建和实例化不可变的List、Set和map。

List list = List.of("item1", "item2", "item3");

共有1个答案

晏炳
2023-03-14

list.of返回的类是包私有静态类之一,因此不是公共API的一部分:

package java.util;
...

class ImmutableCollections {
    ...

    // Java 9-10
    static final class List0<E> extends AbstractImmutableList<E> {
        ...
    }

    static final class List1<E> extends AbstractImmutableList<E> {
        ...
    }

    static final class List2<E> extends AbstractImmutableList<E> {
        ...
    }

    static final class ListN<E> extends AbstractImmutableList<E> {
        ...
    }


    // Java 11+
    static final class List12<E> extends AbstractImmutableList<E> {
        ...
    }

    static final class ListN<E> extends AbstractImmutableList<E> {
        ...
    }
}

因此这不是ArrayList(也不是LinkedList)。您只需要知道它是不可变的,并且满足list接口约定。

 类似资料:
  • 问题内容: 在Java 9中,我们有方便的工厂方法来创建和实例化不可变的List,Set和Map。 但是,不清楚返回对象的具体类型。 例如: 在这种情况下,实际上返回的是哪种类型的列表?它是ArrayList还是LinkedList还是其他某种类型的List? API文档仅提及此行,而没有明确提及其LinkedList: 列表中元素的顺序与提供的参数或提供的数组中的元素的顺序相同。 问题答案: 返

  • 在Java 9中,新的工厂方法被添加到,和接口来创建不可变的实例。 这些工厂方法是便捷的工厂方法,以较简洁的方式创建集合。 旧的方式创建集合 执行上面示例代码,得到以下结果 - 新方法 使用java 9,以下方法将被添加到,和接口以及它们的重载对象。 注意事项 对于和接口,方法重载为到个参数,另一个使用参数。 对于接口,方法重载为有到个参数。 如果接口的参数超过个,则可以使用方法接受参数。 创建集

  • Java9提供了创建不可变列表的便利工厂方法。最后,创建列表非常简单: 但是这种方法有12个重载版本,11个有0到10个元素,一个有var args。 和的情况也是如此。 既然有一个var-args方法,那么有额外的11个方法有什么意义呢? 我认为var args创建一个数组,所以其他11个方法可以跳过额外对象的创建,在大多数情况下,0-10个元素就可以了。还有其他原因吗?

  • 问题内容: Java 9带有用于创建不可变列表的便捷工厂方法。最后,创建列表很简单: 但是此方法有12个重载版本,其中11个包含0到10个元素,而一个具有var args。 同样是与案件Set和Map。 既然有一个var args方法,那么拥有额外的11种方法有什么意义呢? 我认为是var-args创建一个数组,因此其他11种方法可以跳过创建额外对象的过程,并且在大多数情况下,可以使用0-10个元

  • 使用Java 9,新的工厂方法被添加到List,Set和Map接口以创建不可变实例。 这些工厂方法是便利工厂方法,以较简洁和简洁的方式创建集合。 创建集合的旧方法 import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import j

  • 我已经实现了一个自定义队列对象,我想用它在控制器中存储以前的项目。我希望将此类型用作控制器中的私有变量,并仅将其作为符合的对象对外公开,以便客户端可以在不知道任何特定于类的详细信息(例如函数)的情况下迭代或索引该对象。 Swift协议不能是通用的,所以不幸的是,我不能简单地定义一个getter来返回一个