将Map <String,String>传递给需要Map <String,Object>的方法

ope*_*sas 6 java polymorphism casting type-conversion

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

public static ActionDefinition reverse(String action, Map<String, Object> args)
Run Code Online (Sandbox Code Playgroud)

我有返回以下内容的方法:

public static Map<String, String> toMap(String value)
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以将toMap的输出转换为反向使用,例如:

ActionDefinition ad = reverse("Action.method", toMap("param1=value1,param2=value2"));
Run Code Online (Sandbox Code Playgroud)

我需要做点什么

(Map<String, Object>) toMap("param1=value1,param2=value2");
Run Code Online (Sandbox Code Playgroud)

但我无法做到这一点

我也试过以下方法

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;
}
Run Code Online (Sandbox Code Playgroud)

但我想由于类型擦除,我得知该方法是重复的...

任何的想法?

-

编辑

我忘了声明我无法改变反向方法,正如许多人所建议的那样......

rat*_*eak 8

如果你可以改变你想要的方法

public static ActionDefinition reverse(String action, Map<String, ? extends Object> args)
Run Code Online (Sandbox Code Playgroud)


ent*_*nio 3

将其转换为 simple (Map),但要小心你在作弊。

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