我想创建一个map包含条目的条目(int, Point2D)
我怎么能用Java做到这一点?
我尝试了下面的失败.
HashMap hm = new HashMap();
hm.put(1, new Point2D.Double(50, 50));
Run Code Online (Sandbox Code Playgroud) 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个元素.还有其他原因吗?
说我有一些像这样的地图条目:
var a = Map.entry("a", new Object());
var b = Map.entry("b", new Object());
var c = Map.entry("c", new Object());
var m = Map.of(a,b,c); // error here
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
无法解析方法'(java.util.Map.Entry,java.util.Map.Entry,java.util.Map.Entry)'
我只是想从地图中的条目创建一个新的地图,我该怎么做?问题不在于如何在给定Map.Entry实例的情况下初始化Map.
在Java 11中,有一组静态方法java.util.Map可以实例化AbstractImmutableMap:
static <K, V> Map<K, V> of(K k1, V v1) { return new Map1(k1, v1); }
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) { return new MapN(new Object[]{k1, v1, k2, v2}); }
// ... some more "vararg" static methods until 10 pairs (inclusive).
Run Code Online (Sandbox Code Playgroud)
还有另一种方法,除了true-vararg之外,几乎相同:
static <K, V> Map<K, V> ofEntries(Map.Entry<? extends K, ? extends V>... entries) { /* impl here */ }
Run Code Online (Sandbox Code Playgroud)
我想使用后一种方法,因为它允许将条目数扩展到远远超过十个。问题是,我不知道如何创建Map.Entry。它在不同的Maps中有很多实现,但是没有new运算符或静态构造方法,但是 …