无法实例化Map <string,?=“”extends =“”object =“”> map = new TreeMap <string,?=“”extends =“”object =“”>(); </string,> </string ,>

时间:2013-12-19 10:13:06

标签: java generics map treemap

我正在尝试使用泛型类型创建TreeMap,但我无法做到。我这样做是因为我的地图可以喜欢这些:

 Map<String, QueryTerm> terms = new TreeMap<String, QueryTerm>();        
    Map<String, String> params = new TreeMap<String, String>();

因此,我不想创建多个函数来处理具有不同类型的地图,而是创建两个类型的地图。

我怎么能这样做以及我做错了什么?

功能

 private Map<String, ? extends Object> setDatumMap(UserSession session, String parameterName)

    {
        Map<String, ? extends Object> map = new TreeMap<String, ? extends Object>();            

        //Get comma delimited list of filter keys. Split them and use them to retrieve associated values.  
    String sFilters = (String) session.getAttribute(parameterName);
    String[] filterList = sFilters.split(",");
    for(String filterName : filterList)
    {
        String filterValue = (String) session.getAttribute(filterName);
        if (filterValue != null && !filterValue.isEmpty())
        {
            filter.put(filterName, setQueryTermList(filterValue, ListType.BOOLEAN_LIST));
        }
    }
    return filter;
}

2 个答案:

答案 0 :(得分:4)

您应该像这样简单地实例化地图:

Map<String, Object> map = new TreeMap<String, Object>();

你不能使用通配符进行实例化,除非你期望编译器通过猜测你将获得什么值而转换为适当的类,否则它是没有必要的。我们还没有到达那里。

答案 1 :(得分:0)

你需要改变这一行:

private Map<String, ? extends Object> setDatumMap(UserSession session, String parameterName)
{
    Map<String, ? extends Object> map = new TreeMap<String, ? extends Object>();  
     //rest of your code   

private Map<String, Object> setDatumMap(UserSession session, String parameterName)
{
    Map<String, Object> map = new TreeMap<String, Object>(); 
    //rest of your code.  

这样可行。