/**
 * 
 * @author
 * @date 2014-4-27
 * @param clazz
 * @param numberStr
 * @param defaultValue
 * @return
 */
public static Number conv(Class<? extends Number> clazz, String numberStr, Number defaultValue) {
try {
if(Integer.class.isAssignableFrom(clazz)) {
return Integer.parseInt(numberStr);
} else if(Long.class.isAssignableFrom(clazz)) {
return Long.parseLong(numberStr);
} else if(Short.class.isAssignableFrom(clazz)) {
return Short.parseShort(numberStr);
} else if(Double.class.isAssignableFrom(clazz)) {
return Double.parseDouble(numberStr);
} else if(Float.class.isAssignableFrom(clazz)) {
return Float.parseFloat(numberStr);
}
} catch(Exception e) {
return defaultValue;
}
return defaultValue;
}

解决方案 »

  1.   


    这样省事多了,不过还是每样类型都要适配一下,有没有更通用点的呢
    我记得C#就一句
    T value = (T)Convert.ChangeType(str, typeof(T));
      

  2.   


    如果要将转换后的值与defaultValue比较大小,怎么整?
      

  3.   


    如果要将转换后的值与defaultValue比较大小,怎么整?
    int defaultValue = 1234;
    Number value = NumberTest.conv(Integer.class, "123", defaultValue);
    System.out.println(value.intValue() - defaultValue);
      

  4.   


    这样省事多了,不过还是每样类型都要适配一下,有没有更通用点的呢
    我记得C#就一句
    T value = (T)Convert.ChangeType(str, typeof(T));        /**
     * 
     * @author
     * @date 2014-4-27
     * @param <T>
     * @param clazz
     * @param numberStr
     * @param defaultValue
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T extends Number> T conv2(Class<T> clazz, String numberStr, T defaultValue) {
    try {
    return (T)NumberFormat.getInstance().parse(numberStr);
    } catch(Exception e) {
    }
    return defaultValue;
    }
      

  5.   

    用NumberFormat.parse有个问题就是传入“12abc34”,也会转成功,结果为12