将Map <string,string =“”>传递给需要Map <string,object =“”> </string,> </string,>的方法

时间:2011-05-09 02:09:11

标签: java casting polymorphism type-conversion

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

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 个答案:

答案 0 :(得分:8)

如果您可以更改要调用的方法

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

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