繁体   English   中英

Map.of 为 Java 在 Scala

[英]Map.of for Java in Scala

如何从 Z3012DCFF1477E1FEAAB81764 调用 java Map的 static varg 过载?

例如:

 val map: java.util.Map[Char,Int] =
  java.util.Map.of('Z', 5, 'R', 2, 'X', 9, 'A', 4, 'F', 1)

这失败并出现错误,因为 Scala 将其视为 Map 的成员。

    Value of is not a member of object java.util.Map
          java.util.Map.of('Z', 5, 'R', 2, 'X', 9, 'A', 4, 'F', 1)
                        ^Compilation Failed 

请注意, Map.of是随Java SE 9引入的,因此您的代码将无法使用 Java9 之前的 JDK 进行编译。

您应该记住的另一个重要事实是,使用Map.of最多只能存储 10 个条目,并且对于每个条目数(0 到 10),定义了一个单独的Map.of 所以,它不是一个 varg。

例如以下陈述是正确的

Map<Character, Integer> map = Map.of('A', 1, 'B', 2, 'C', 3, 'D', 4, 'E', 5, 'F', 6, 'G', 7, 'H', 8, 'I', 9,
                'J',  10);

不是以下一个:

Map<Character, Integer> map = Map.of('A', 1, 'B', 2, 'C', 3, 'D', 4, 'E', 5, 'F', 6, 'G', 7, 'H', 8, 'I', 9,
                'J', 10,'K',11);

如果您想使用这样的单个语句存储超过 10 个条目,则可以使用Map#ofEntries

演示:

import static java.util.Map.entry;

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Character, Integer> map = Map.ofEntries(entry('A', 1), entry('B', 2), entry('C', 3), entry('D', 4),
                entry('E', 5), entry('F', 6), entry('G', 7), entry('H', 8), entry('I', 9), entry('J', 10),
                entry('K', 11));

        System.out.println(map);
    }
}

Output:

{K=11, J=10, I=9, H=8, G=7, F=6, E=5, D=4, C=3, B=2, A=1}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM