Вы можете создать собственный SingleValueConverter для преобразования списка:
public class IntegerListConverter implements SingleValueConverter {
@Override
public boolean canConvert(Class clazz) {
return List.class.isAssignableFrom(clazz);
}
@Override
public Object fromString(String arg0) {
Collection<Integer> collection = new ArrayList<Integer>();
String[] integerStrings = arg0.split(" ");
for (int i = 0; i < integerStrings.length; i++) {
collection.add(Integer.valueOf(integerStrings[i]));
}
return collection;
}
@Override
public String toString(Object arg0) {
List collection = (List) arg0;
StringBuffer sb = new StringBuffer();
boolean first = true;
for (Object object : collection) {
if (first) {
first = false;
} else {
sb.append(' ');
}
sb.append(object.toString());
}
return sb.toString();
}
}
Тот факт, что List<Integer>
является общий интерфейс делает вещи немного сложнее. Эта реализация canConvert
даст ложные срабатывания для списков, которые содержат другие вещи, кроме целых. Я не уверен, содержит ли параметр clazz достаточную информацию для определения аргументов общего типа. Так безопаснее, вероятно, является назначение преобразователя только для одной области:
public class MyClass {
@XStreamConverter(IntegerListConverter.class)
List<Integer> values;
//+ getter & setters
}
Кроме того, эта реализация fromString
всегда будет генерировать ArrayList, но это должно быть хорошо, я подозреваю.
В итоге я сделал то же самое! Благодаря :) – Ajay