//System.out.println("rebuild " + o + " (a " + (o==null?null:o.getClass().getName()) + ") " + c);
if (o==null || c.isAssignableFrom(o.getClass())) return o;
if ((c == Character.class || c == Character.TYPE) && o instanceof String && ((String)o).length()==1) return new Character(((String)o).charAt(0));
//System.out.println("rebuild " + o + " (a " + (o==null?null:o.getClass().getName()) + ") " + c);
if (o==null || c.isAssignableFrom(o.getClass())) return o;
if ((c == Character.class || c == Character.TYPE) && o instanceof String && ((String)o).length()==1) return new Character(((String)o).charAt(0));