Передать картук методу, требующему Map - PullRequest
6 голосов
/ 09 мая 2011

У меня есть метод со следующей подписью

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;
}

но я думаю, что из-за стирания типа я получаю, что метод дублируется ...

Есть идеи?

-

1024 * редактировать *

Я забыл заявить, что не могу изменить обратный метод, как многие уже предлагали ...

Ответы [ 3 ]

8 голосов
/ 09 мая 2011

, если вы можете изменить метод, который хотите вызвать, на

public static ActionDefinition reverse(String action, Map<String, ? extends Object> args)
4 голосов
/ 09 мая 2011

Измените сигнатуру метода реверса для использования обобщенных значений

public static ActionDefinition reverse(String action, Map<String, ? extends Object> args)
3 голосов
/ 09 мая 2011

Приведите это к простому (Map), но будьте осторожны, вы обманываете.

Вы всегда можете привести его к Map, потому что он один, и вы всегда можете передать необработанный тип в метод из-за обратной совместимости, поэтому приведение параметризованного типа к необработанному всегда является способом преобразовать его любые другие параметры. Но вам следует делать это только тогда, когда вы знаете, что это не приведет к ошибке, и если у вас нет разумной альтернативы.

...