2012-11-05 102 views
8

我需要创建一个自定义类来扩展java.util.LinkedHashMap,并将String作为键和String作为值,并且具有一个无参数构造函数,用于预填充此映射初始值。如何扩展HashMap以允许字符串,字符串类型

我被困在第一个任务 - 如何扩展LinkedHashMap的方式,而不是它只接受的泛型参数?

我想这一点,(不工作)

import java.util.LinkedHashMap; 

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


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

你忘了完成您的最后一句话。无论如何,除非你显示一些你可能已经尝试过的代码,否则它并不重要。 –

+3

扩展LinkedHashMap几乎肯定是一个不好的解决方案。您可以使用其参数化表单或使用组合而不是继承。 –

+0

我不会有构图的问题,但是我需要一个getter方法来从我的对象中获取Map()。我想我的对象是一个HashMap,所以它会更容易使用jsp与jstl – Wil

回答

8

所有你需要的是:

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"); 
+0

谢谢。这工作。我仍然想解释为什么MyMenu之后我不需要?我正在学习使用Java中的泛型,任何好的解释对我都很有帮助。 – Wil

2

如果你的斗争,因为你描述的,只是与声明,然后我会尝试这样的:

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

尝试:

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

你可以做类似如下:

public class MyMap extends LinkedHashMap<String,String>{ 
1

只要你使用JDK 1.5或更高版本,可以使用泛型和创建一个存储字符串键和字符串值LinkedHashMap中,并如下初始化:

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

组成你的情况不是继承一个更好的解决方案:

class MyProperties implements Map<String, String> { 

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

    // ... delegate your methods to delegatee 
} 
+1

构图几乎总是比继承更好。 +1 – durron597

+0

但不是“永远” – R1K0

相关问题