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

时间:2012-11-05 15:45:21

标签: 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");
    }
}

6 个答案:

答案 0 :(得分:13)

您只需要:

import java.util.LinkedHashMap;

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

    public MyMenu(){
        this.put("index.jsp", "Home Page");
    }
}

从您的班级名称中移除<String, String>即可。您正在创建一个扩展LinkedHashMap<String, String>的类,因此您的类已经是Map,其中String为关键字,String为值。如果你想创建自己的泛型类,那么你必须这样做:

为例如:

创建一个类
public class MyMenu<K, V> { ... }

然后扩展该类:

public class SomeMyMenu extends MyMenu<String, String> { ... }

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

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

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

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

SomeClass.MAP.get("Some Key");

答案 1 :(得分:2)

如果你所描述的那种斗争只是声明,那么我会尝试类似的东西:

class MyCustomizedMap extends LinkedHashMap<String, String> {
    //...
}

答案 2 :(得分:2)

您可以执行以下操作:

   public class MyMap extends LinkedHashMap<String,String>{

答案 3 :(得分:1)

尝试:

public class MyMap extends LinkedHashMap<String, String> { ... }

答案 4 :(得分:1)

只要您使用的是JDK 1.5或更高版本,就可以使用泛型并创建一个LinkedHashMap来存储String键和String值,并按如下所示进行初始化:

LinkedHashMap<String, String> myMap = new LinkedHashMap<String, String>()
{
    {
        put("abc", "xyz");
        ...
    };
}

答案 5 :(得分:1)

在你的情况下,组合是比继承更好的解决方案:

class MyProperties implements Map<String, String> {

    private Map<String, String> delegatee = new LinkedHashMap<String, String>();

    // ... delegate your methods to delegatee
}