关于java类型转换的问题…

tbssl 2019-06-25 09:16:26
事情是这样的。 现在有一堆储存为String类型的变量,和一个配置文件,文件里注明了每个变量的实际类型。 请问如何简洁地把这些变量变成它们的实际类型… 因为变量类型有点多,不希望用if else…写出来大概会很丑吧… 能不能用反射来做呢?
...全文
143 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果涉及业务逻辑 或者 if else 代码块中 重复的 比较多 ,可以考虑 策略模式来取代 if else
guishuanglin 2019-06-26
  • 打赏
  • 举报
回复
难道spring框架不也是这样做的, if else是可以的, 我就是这样写的: /** 根据已知T类型,把字符转换成相应T类型对象值,返回T */ public static <T> T getObject(String attrVal, Class<T> clazz, T defval) { String str = Convert.trimEmpty(attrVal); if(str == null || clazz == null) return null; try { if(String.class.isAssignableFrom(clazz)) { return clazz.cast(str); } else if(Integer.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getInt(str)); } else if(Long.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getLong(str)); } else if(Double.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getDouble(str)); } else if(BigDecimal.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getBigDecimal(str)); } else if(Float.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getFloat(str)); } else if(Short.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getShort(str)); } else if(Byte.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getByte(str)); } else if(int.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getint(str)); } else if(long.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getlong(str)); } else if(double.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getdouble(str)); } else if(float.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getfloat(str)); } else if(short.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getshort(str)); } else if(Date.class.isAssignableFrom(clazz)) { return clazz.cast(Convert.getDate(str)); } } catch(Exception e) { System.out.println("类型转换错误:"); e.printStackTrace(); return defval; } return defval; } /** * 把数据库数据,格式化成java对象 * @date 2008-10-25 */ public static Integer getInteger(Object data){ if(data==null){ return null; } if(data instanceof Integer){ return (Integer)data; } if(data instanceof Long){ return Integer.valueOf(((Long)data).intValue()); } if(data instanceof Short){ return Integer.valueOf(((Short)data).intValue()); } if(data instanceof Double){ return Integer.valueOf(((Double)data).intValue()); } if(data instanceof Float){ return Integer.valueOf(((Float)data).intValue()); } if(data instanceof BigDecimal){ return Integer.valueOf(((BigDecimal)data).intValue()); } if(data instanceof Byte){ return Integer.valueOf(((Byte)data).intValue()); } String s = String.valueOf(data).trim(); if(s.equals("")){ s = null; return null; } Integer v = null; try { v = new Integer(s); } catch (Exception e) { data = null; v = null; System.out.println("对象 "+s+" 转换成 Integer 数据错误."); } finally { data = null; s = null; } return v; }
立刀流 2019-06-25
  • 打赏
  • 举报
回复
配置文件里是注释?注释的话机器又看不懂
「已注销」 2019-06-25
  • 打赏
  • 举报
回复
int i = 0; switch(i)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧