如何扩展HashMap以允许String,String类型

Wil*_*Wil 9 java hashmap

我需要创建一个扩展java.util.LinkedHashMap的自定义类,并将String作为键,String作为值,并且具有一个no-arg构造函数,该构造函数使用初始值预填充此映射.

我陷入了第一个任务 - 如何以这样一种方式扩展LinkedHashMap,而不是只接受它的通用参数?

我试过这个,(不工作)

import java.util.LinkedHashMap;

@SuppressWarnings("serial")
public class MyMenu<String, String> extends LinkedHashMap<String, String> {


    public MyMenu(){
        this.put("index.jsp", "Home Page");
    }
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*nis 14

所有你需要的是:

import java.util.LinkedHashMap;

@SuppressWarnings("serial")
public class MyMenu extends LinkedHashMap<String, String> {

    public MyMenu(){
        this.put("index.jsp", "Home Page");
    }
}
Run Code Online (Sandbox Code Playgroud)

<String, String>从您的班级名称中删除它将起作用.您正在创建这是扩展一个类LinkedHashMap<String, String>,以便类已经是Map这需要String作为重点,并String作为值.如果你想创建自己的泛型类,那么你必须这样做:

创建一个类,例如:

public class MyMenu<K, V> { ... }
Run Code Online (Sandbox Code Playgroud)

然后扩展该类:

public class SomeMyMenu extends MyMenu<String, String> { ... }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您必须指定类的键和值,以便SomeMyMenu类使用键和值String.您可以在此处阅读有关泛型的更多信息.

但是更有效的方法来做你想要的是创建一些最终类并在其中声明地图如下:

public static final LinkedHashMap<String, String> MAP = new LinkedHashMap<String, String>() {{
    put("index.jsp", "Home Page");
}};
Run Code Online (Sandbox Code Playgroud)

要从地图中获取值,请使用:

SomeClass.MAP.get("Some Key");
Run Code Online (Sandbox Code Playgroud)