Проблема XStream canConvert для переопределенных обобщений - PullRequest
1 голос
/ 11 апреля 2011

У меня есть требование, когда мне нужно написать собственный XStream MapConverter, который просто конвертирует карту определенного типа. Чтобы привести пример, я бы хотел, чтобы мой пользовательский конвертер просто работал с картами Map (String, Date). Мне нужно добиться этого путем переопределения метода canConvert. На данный момент это метод canConvert, который я написал:

@Override  
public boolean canConvert(Class clazz) {  
    return (!clazz.equals(Object.class) && Map.class.isAssignableFrom(clazz));  
}  

Но это будет работать для всех типов карт. Поскольку «java.lang.Class» не предоставляет какой-либо метод, который дает информацию о типе параметров, для универсальных коллекций я не могу достичь желаемого результата в моем методе canConvert.

Один из возможных способов решения этой проблемы - создание фиктивного класса-обертки вокруг Map (String, Date) и его использование для реализации метода canConvert. Может ли кто-нибудь предложить лучший способ решения этой проблемы в методе canConvert?

1 Ответ

0 голосов
/ 11 апреля 2011

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

...