在Java中使用Map <keytype,valuetype =“”>的通用映射</keytype,>

时间:2012-10-07 17:39:15

标签: java generics map

我有一个类TestMap,只有静态方法(包括main),用于测试Maps。作为示例,类中有一个方法接受映射,键和值的类型分别表示为KeyTypeValueType,如下所示;

public static <KeyType,ValueType> void printMap( String msg, Map<KeyType,ValueType> m )
{
    System.out.println( msg + ":" );
    Set<Map.Entry<KeyType,ValueType>> entries = m.entrySet( );

    for( Map.Entry<KeyType,ValueType> thisPair : entries )
    {
        System.out.print( thisPair.getKey( ) + ": " );
        System.out.println( thisPair.getValue( ) );
    }
}

我的问题是,如果我想重新编写这个类以便它可以实例化,而不是只包含静态方法,我怎样才能在类中定义一个可以与Map<KeyType, ValueType>一起使用的映射?

我尝试按如下方式定义地图,但似乎无效。

private Map<KeyType, ValueType> internalMap;

有什么想法吗?

根据第一条评论,我试图添加到类定义,然后我按如下方式设置构造函数;

public class TestMap<KeyType, ValueType>
{
    private Map<KeyType, ValueType> internalMap;

    /*
     * Constructor which accepts a generic Map for testing
    */
    public <KeyType,ValueType> TestMap(Map<KeyType, ValueType> m)
    {
       this.internalMap = m;
    }       
}

但是,构造函数中的赋值是抛出一个错误,说它是一个Type Mismatch,并且它无法从java.util.Map转换为java.util.Map

2 个答案:

答案 0 :(得分:2)

你的意思是:

class MyMap<KeyType, ValueType> {
    private Map<KeyType, ValueType> internalMap;
}

编辑:您不需要构造函数上的类型参数:

class TestMap<KeyType, ValueType>
{
    private Map<KeyType, ValueType> internalMap;

    /*
     * Constructor which accepts a generic Map for testing
    */
    public TestMap(Map<KeyType, ValueType> m)
    {
       this.internalMap = m;
    }       
}

答案 1 :(得分:1)

您可以尝试声明internalMap,但由于Map是一个接口,您需要使用具体的类类型对其进行实例化(例如HashMap,{{1}等等。)

TreeMap