Map.entry(...) 对于类型 Map 未定义

0 java dictionary hashmap

我在学校的电脑上玩弄 Java 和哈希图。

我能够即时实例化一个Entry类型String, Integer。然后将其添加到ArrayListEntrie秒。我将此代码通过电子邮件发送给自己以备后用。

但是在我的家用电脑和笔记本电脑上,它不会让我。相同的确切代码说

该方法entry(string,int)未定义类型Map

代码是:

Map.Entry<String, Integer> entry = Map.entry(largest, maxCount);
Run Code Online (Sandbox Code Playgroud)

我认为这与Map.Entry作为接口的事实有关?

正如谷歌结果似乎说你必须让自己的Entry班级来做到这一点?但是在较新版本的 Java 中,这种情况发生了变化吗?为什么我之前可以很好地执行此代码?

Zab*_*uza 5

解释

查找此方法的Javadoc。它说:

自:9

这意味着这个方法是在 Java 9 中添加的。

所以你家里的机器可能没有 Java 9 或更新版本。


升级

在您的 CMD 中运行java -versionjavac -version以验证您的版本。然后安装更新的 Java(例如来自AdoptOpenJDK)。


前 Java 9

如果您正在寻找无需 Java 9 即可运行的解决方案,您可以使用以下方法:

Map.Entry<String, Integer> entry = new AbstractMap.SimpleEntry<String, Integer>(largest, maxCount);
Run Code Online (Sandbox Code Playgroud)

如此处更详细的解释:Java - How to create new Entry (key, value)

你说:

正如谷歌结果似乎说你必须制作自己的 Entry 课程才能做到这一点?

Java 6 之前的版本也是如此。上述类AbstractMap.SimpleEntry是在 Java 6 中添加的,可以(ab)用于此目的。在此之前,您必须创建自己的实现。


面向对象编程

另一种可能更好的选择可能是创建您自己的小类来保存该数据,然后给它一个适当的名称。

例如,与其Map.Entry<String, Integer>让 a 通过他的String name和存储一个人int age,为什么不Person直接创建一个类:

public class Person {
    private final String name;
    private final int age;

    // Constructor and getters, ...
}
Run Code Online (Sandbox Code Playgroud)

更具可读性,更易于维护和扩展。