有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将Map<String,String>传递给需要Map<String,Object>

我有一个具有以下签名的方法

public static ActionDefinition reverse(String action, Map<String, Object> args)

我有一个方法返回以下内容:

public static Map<String, String> toMap(String value)

是否有某种方法可以将toMap的输出转换为反向使用,例如:

ActionDefinition ad = reverse("Action.method", toMap("param1=value1,param2=value2"));

我需要做一些类似的事情

(Map<String, Object>) toMap("param1=value1,param2=value2");

但我没办法做到

我还尝试了以下方法

public static Map<String, String> toMap(String value) {
    Map<String, Object> source = toMap(value);
    Map<String, String> map = new LinkedHashMap<String, String>();

    for(Map.Entry<String, Object> entry: source.entrySet()) {
        map.put(entry.getKey(), (String) entry.getValue());
    }

    return map;
}

但我猜,由于类型擦除,我得到的方法是重复的

有什么想法吗

--

编辑

我忘了声明我不能改变反向方法,因为到目前为止很多人都建议


共 (3) 个答案

  1. # 1 楼答案

    如果你能改变你想调用的方法

    public static ActionDefinition reverse(String action, Map<String, ? extends Object> args)
    
  2. # 2 楼答案

    将其转换为简单的(Map),但要注意你在作弊

    因为它是Map,所以始终可以将其强制转换为Map,因为向后兼容,所以始终可以将原始类型提供给方法,所以将参数化类型强制转换为原始类型始终是将其转换为任何其他参数的一种方式。但是,只有当您知道它不会引入错误,并且没有明智的选择时,才应该这样做

  3. # 3 楼答案

    将reverse的方法签名更改为使用泛型

    public static ActionDefinition reverse(String action, Map<String, ? extends Object> args)