1

我有一个类,TestMap只有main用于测试的静态方法(包括一个)Maps。类中有一个方法,例如,接受一个map,key和value的类型分别用KeyType和表示ValueType,如下图;

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;
    }       
}

但是,构造函数中的赋值抛出一个错误,说它是类型不匹配,并且它不能从 java.util.Map 转换为 java.util.Map

4

2 回答 2

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;
    }       
}
于 2012-10-07T17:41:55.723 回答
1

您可以internalMap按照您尝试过的方式声明,但由于Map是接口,您需要使用具体的类类型(例如 、 等)实例HashMapTreeMap

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

    public TestMap() {
        internalMap = new HashMap<KeyType, ValueType>();
    }

    public TestMap(Map<KeyType, ValueType> m) {
        internalMap = m;
    }

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

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

    . . . // methods to add to internal map, etc.
}
于 2012-10-07T17:47:01.870 回答