Java 如何扩展HashMap以允许字符串、字符串类型

Java 如何扩展HashMap以允许字符串、字符串类型,java,hashmap,Java,Hashmap,我需要创建一个自定义类,该类扩展java.util.LinkedHashMap,将字符串作为键,将字符串作为值,并具有一个无参数构造函数,该构造函数使用初始值预先填充该映射 我被困在了第一个任务上——如何扩展LinkedHashMap,使其不再只接受一般参数 我试过这个,(不起作用) import java.util.LinkedHashMap; @抑制警告(“串行”) 公共类MyMenu扩展LinkedHashMap{ 公共菜单(){ 这个.put(“index.jsp”,“主页”); } }

我需要创建一个自定义类,该类扩展java.util.LinkedHashMap,将字符串作为键,将字符串作为值,并具有一个无参数构造函数,该构造函数使用初始值预先填充该映射

我被困在了第一个任务上——如何扩展LinkedHashMap,使其不再只接受一般参数

我试过这个,(不起作用)

import java.util.LinkedHashMap;
@抑制警告(“串行”)
公共类MyMenu扩展LinkedHashMap{
公共菜单(){
这个.put(“index.jsp”,“主页”);
}
}

如果您所描述的斗争仅仅是与声明有关,那么我会尝试以下方式:

class MyCustomizedMap extends LinkedHashMap<String, String> {
    //...
}
类MyCustomizedMap扩展LinkedHashMap{ //... } 试试:

公共类MyMap扩展LinkedHashMap{…}

您可以执行以下操作:

   public class MyMap extends LinkedHashMap<String,String>{
公共类MyMap扩展LinkedHashMap{

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

LinkedHashMap<String, String> myMap = new LinkedHashMap<String, String>()
{
    {
        put("abc", "xyz");
        ...
    };
}
LinkedHashMap myMap=新建LinkedHashMap()
{
{
卖出(“abc”、“xyz”);
...
};
}
您只需要:

import java.util.LinkedHashMap;

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

    public MyMenu(){
        this.put("index.jsp", "Home Page");
    }
}
然后扩展该类:

public class SomeMyMenu extends MyMenu<String, String> { ... }
要从地图中获取值,请使用:

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

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

class MyProperties implements Map<String, String> {

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

    // ... delegate your methods to delegatee
}
类MyProperties实现映射{
private Map delegatee=new LinkedHashMap();
//…将您的方法委派给被委派者
}

你忘了完成最后一句话。无论如何,这没关系,除非你展示一些你可能尝试过的代码。扩展LinkedHashMap几乎肯定是一个糟糕的解决方案。你可以使用它的参数化形式或使用组合而不是继承。我对组合没有问题,但我需要一个getter方法来获取映射()从我的对象。我希望我的对象是一个HashMap,这样从jsp与jstli一起使用就更容易了。我同意@dystroy。我们使用一个带有varargs的实用方法来初始化带有初始值的映射。在合成模型中,您不一定需要getter来获取
map
。您可以实现
map
接口和ust delegate to your…delegate…谢谢。这很有效。我仍然希望得到解释,为什么在我的菜单之后不需要?我正在学习使用Java中的泛型,任何好的解释对我都非常有帮助。组合几乎总是比继承好。+1但不是“总是”
public class SomeMyMenu extends MyMenu<String, String> { ... }
public static final LinkedHashMap<String, String> MAP = new LinkedHashMap<String, String>() {{
    put("index.jsp", "Home Page");
}};
SomeClass.MAP.get("Some Key");
class MyProperties implements Map<String, String> {

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

    // ... delegate your methods to delegatee
}