/**
*
* @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;
}
这样省事多了,不过还是每样类型都要适配一下,有没有更通用点的呢
我记得C#就一句
T value = (T)Convert.ChangeType(str, typeof(T));
如果要将转换后的值与defaultValue比较大小,怎么整?
如果要将转换后的值与defaultValue比较大小,怎么整?
int defaultValue = 1234;
Number value = NumberTest.conv(Integer.class, "123", defaultValue);
System.out.println(value.intValue() - defaultValue);
这样省事多了,不过还是每样类型都要适配一下,有没有更通用点的呢
我记得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;
}