在Java 9中,我们有方便的工厂方法来创建和实例化不可变的List,Set和Map。
但是,不清楚返回对象的具体类型。
例如:
List list = List.of("item1", "item2", "item3");
在这种情况下,实际上返回的是哪种类型的列表?它是ArrayList还是LinkedList还是其他某种类型的List?
API文档仅提及此行,而没有明确提及其LinkedList:
列表中元素的顺序与提供的参数或提供的数组中的元素的顺序相同。
返回的类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
接口协定。
在Java9中,我们有方便的工厂方法来创建和实例化不可变的List、Set和map。
在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来返回一个