@@ -294,49 +294,56 @@ public void setOverrideResId(int resId) {
294294 overrideResId = resId ;
295295 }
296296
297+ /**
298+ * Applies correct number type to the value member based on defaultValue type.
299+ */
297300 @ SuppressWarnings ("unchecked" )
301+ private void modifyValue (Number src ) {
302+ if (src == null )
303+ return ;
304+
305+ if (defaultValue instanceof Byte ) {
306+ value = (T ) (Byte ) src .byteValue ();
307+ } else if (defaultValue instanceof Short ) {
308+ value = (T ) (Short ) src .shortValue ();
309+ } else if (defaultValue instanceof Integer ) {
310+ value = (T ) (Integer ) src .intValue ();
311+ } else if (defaultValue instanceof Long ) {
312+ value = (T ) (Long ) src .longValue ();
313+ } else if (defaultValue instanceof Float ) {
314+ value = (T ) (Float ) src .floatValue ();
315+ } else if (defaultValue instanceof Double ) {
316+ value = (T ) (Double ) src .doubleValue ();
317+ } else if (defaultValue instanceof Character ) {
318+ value = (T ) (Character ) (char ) src .intValue ();
319+ }
320+ }
321+
322+ /**
323+ * Parses src to initialize numberValue. If not parsable it uses the defaultValue.
324+ */
325+ private void modifyNumberValue (String src ) {
326+ try {
327+ numberValue = Double .valueOf (src );
328+ } catch (NumberFormatException e ) {
329+ numberValue = null ;
330+ if (defaultValue instanceof Number ) {
331+ numberValue = ((Number ) defaultValue ).doubleValue ();
332+ }
333+ }
334+ }
335+
298336 private void cacheComputedValues () {
299337 if (value instanceof String ) {
300338 stringValue = (String ) value ;
301- try {
302- numberValue = Double .valueOf (stringValue );
303- } catch (NumberFormatException e ) {
304- numberValue = null ;
305- if (defaultValue instanceof Short ) {
306- value = (T ) (Short ) ((Number ) defaultValue ).shortValue ();
307- numberValue = Double .valueOf (((Number ) defaultValue ).shortValue ());
308- } else if (defaultValue instanceof Integer ) {
309- value = (T ) (Integer ) ((Number ) defaultValue ).intValue ();
310- numberValue = Double .valueOf (((Number ) defaultValue ).intValue ());
311- } else if (defaultValue instanceof Long ) {
312- value = (T ) (Long ) ((Number ) defaultValue ).longValue ();
313- numberValue = Double .valueOf (((Number ) defaultValue ).longValue ());
314- } else if (defaultValue instanceof Float ) {
315- value = (T ) (Float ) ((Number ) defaultValue ).floatValue ();
316- numberValue = Double .valueOf (((Number ) defaultValue ).floatValue ());
317- } else if (defaultValue instanceof Double ) {
318- value = (T ) (Double ) ((Number ) defaultValue ).doubleValue ();
319- numberValue = Double .valueOf (((Number ) defaultValue ).doubleValue ());
320- }
321- }
339+ modifyNumberValue (stringValue );
340+ modifyValue (numberValue );
341+
322342 } else if (value instanceof Number ) {
323343 stringValue = "" + value ;
324344 numberValue = ((Number ) value ).doubleValue ();
325- if (defaultValue instanceof Byte ) {
326- value = (T ) (Byte ) ((Number ) value ).byteValue ();
327- } else if (defaultValue instanceof Short ) {
328- value = (T ) (Short ) ((Number ) value ).shortValue ();
329- } else if (defaultValue instanceof Integer ) {
330- value = (T ) (Integer ) ((Number ) value ).intValue ();
331- } else if (defaultValue instanceof Long ) {
332- value = (T ) (Long ) ((Number ) value ).longValue ();
333- } else if (defaultValue instanceof Float ) {
334- value = (T ) (Float ) ((Number ) value ).floatValue ();
335- } else if (defaultValue instanceof Double ) {
336- value = (T ) (Double ) ((Number ) value ).doubleValue ();
337- } else if (defaultValue instanceof Character ) {
338- value = (T ) (Character ) (char ) ((Number ) value ).intValue ();
339- }
345+ modifyValue ((Number ) value );
346+
340347 } else if (value != null &&
341348 !(value instanceof Iterable <?>) && !(value instanceof Map <?, ?>)) {
342349 stringValue = value .toString ();
0 commit comments