Java 9附带了用于创建不可变列表的便捷工厂方法.最后,列表创建非常简单:
List<String> list = List.of("foo", "bar");
Run Code Online (Sandbox Code Playgroud)
但是这个方法有12个重载版本,11个有0到10个元素,另一个有var args.
static <E> List<E> of(E... elements)
Run Code Online (Sandbox Code Playgroud)
同样是与案件Set和Map.
由于存在var args方法,有多少11种方法有什么意义呢?
我认为var-args创建一个数组,所以其他11个方法可以跳过创建一个额外的对象,在大多数情况下会有0-10个元素.还有其他原因吗?
我正在尝试创建一个城市和温度的地图,但它正在抛出一个IllegalArgumentException.这是我正在做的事情:
Map<String, Integer> tempMap = Map.of("London", 13, "Paris", 17, "Amsterdam", 13,
"Madrid", 21, "Rome", 19, "London", 13, "Bonn", 14,
"Moscow", 7, "Barcelona", 20, "Berlin", 15);
Run Code Online (Sandbox Code Playgroud)
如果我逐个添加它们就没问题了:
Map<String, Integer> tempMap = new Hashmap<>(); // or LinkedHashMap
tempMap.put("London", 13);
tempMap.put("Madrid", 21);
tempMap.put("Moscow", 7);
// etc.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?内容应该是不一样的吗?