具有通用类型的Java通用映射作为键/值

时间:2015-06-17 15:04:40

标签: java generics collections

我想编写一个方法,它将Map作为参数,可以包含任何对象作为其值。我正在尝试使用泛型实现它,但我无法实现它。

以下是我到目前为止尝试过的代码。这段代码有两个方法:genericTest,我试图实现通用解决方案,nonGenericTest,这是我实际想要使用通用解决方案,但不使用泛型实现。基本上,第二种方法是我想转换为泛型的方法。

我做错了什么?

import java.util.Iterator;
import java.util.Map;

public class Test {
    //V cannot be resolve to a type
    public void genericTest(Map<String, V> params) {
    }

    public void nonGenericTest(Map<String, Object> params) {

        Iterator<String> it = params.keySet().iterator();
        while (it.hasNext()) {
            String key =  it.next();
            Object value = params.get(key);
            if(value instanceof String){
                String val1=(String) value;
                // do something 
            }else if(value instanceof Integer){
                Integer val1 = (Integer) value;
            } 
        }
    }
}

我收到编译错误,如代码所示。

2 个答案:

答案 0 :(得分:6)

你有两个选择:

  • V作为类的参数引入。

    public class Test<V>
    
  • V作为该函数的类型参数。

    public <V> void genericTest(Map<String, V> params)
    

答案 1 :(得分:0)

我建议将其与这样的类定义一起使用:

public class SettingsClient<T> extends TestWebserviceClient {

    private Map<String, List<T>> mapWithAllPojoLists = new HashMap<>();

}

在方法内部,您可以像这样读取/写入地图:

   public List<Discount> getListOfDiscounts() {

        if (mapWithAllPojoLists.get("discount") != null) {
            return (List<Discount>) mapWithAllPojoLists.get("discount");
        }

        GetDiscountsResponse response = getGetDiscountsResponse();
        ArrayOfDiscount arrayOfDiscount = response.getGetDiscountsResult().getValue();

        List<Discount> discounts = arrayOfDiscount.getDiscount();

        if (discounts == null) {
            return new ArrayList<>();
        }

        mapWithAllPojoLists.put("discount", (List<T>) discounts);
        return discounts;
    }