您可以创建自定义 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,但我怀疑应该没问题。