Entendi o que deve ser feito para dar certo. Eis a classe correta:
package br.com.caleum.xstream;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.SingleValueConverter;
public class PrecoConverter implements SingleValueConverter {
@Override
public boolean canConvert(Class preco) {
return preco.isAssignableFrom(Double.class);
}
@Override
public Object fromString(String preco) {
NumberFormat formatador = getFormatador();
try {
return formatador.parse(preco);
} catch (ParseException e) {
throw new ConversionException(e);
}
}
@Override
public String toString(Object preco) {
NumberFormat formatador = getFormatador();
return formatador.format(preco);
}
private NumberFormat getFormatador() {
Locale brasil = new Locale("pt", "br");
NumberFormat formatador = NumberFormat.getCurrencyInstance(brasil);
return formatador;
}
}
Minha dúvida é: por que eu devo checar pelo tipo Double.class e não double.class, já que o atributo preco, na classe Produto, é do tipo primitivo double?