Java中的基本数据类型默认值扩展
因为在很多情况下,如果要转换的数据为null,调用者期望的是返回默认值.
系统自动提供的默认值不能满足我们的需求,例如int的默认值为0,但是在sql查询中,如果查询失败,我们期望的是小于0的值,例如Select Count(1) from table1这样的操作.
为此,我提供了取得数据类型默认值的扩展函数
目标:
1)实现根据自己需要返回基本类型的默认值
2) 性能不要太差
1: 接口:
public static <T> T GetDefault(Class<T> t)
2: 实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /** * 获取数据类型的默认值 * @param t * @return */ @SuppressWarnings ( "unchecked" ) public static <T> T GetDefault(Class<T> t) { if (t == Object. class ) { return null ; } if (t == Integer. class ) { return t.cast(- 1 ); } if (t == String. class ) { return t.cast( "" ); } if (t == boolean . class ) { Object ret = false ; return (T)ret; } if (t == Boolean. class ) { Object ret = false ; return (T)ret; } if (t == BigDecimal. class ) { return (T)( new BigDecimal(- 1 )); } Class<?> superClass = t.getSuperclass(); if (superClass == null ) { Object val = - 1 ; return (T)val; } if (t.getSuperclass().equals(Number. class )) { Object val = - 1 ; return (T)val; } return null ; } |
3: 测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | @Test public void Test_HiTypeHelper_Cast() { Integer val = 1 ; int ret = HiTypeHelper.Cast( int . class , val); Assert.assertEquals(ret, 1 ); String text = "1" ; ret = HiTypeHelper.Cast( int . class , text); Assert.assertEquals(ret, 1 ); text = "a" ; ret = HiTypeHelper.Cast( int . class , text); Assert.assertEquals(ret, - 1 ); int val2 = 1 ; Integer ret2 = HiTypeHelper.Cast(Integer. class , val2); Assert.assertEquals(ret2.intValue(), 1 ); text = "1" ; ret2 = HiTypeHelper.Cast(Integer. class , text); Assert.assertEquals(ret2.intValue(), 1 ); boolean bl = HiTypeHelper.Cast( boolean . class , 1 ); Assert.assertTrue(bl); bl = HiTypeHelper.Cast( boolean . class , 3 ); Assert.assertTrue(bl); bl = HiTypeHelper.Cast( boolean . class , 0 ); Assert.assertFalse(bl); bl = HiTypeHelper.Cast( boolean . class , - 1 ); Assert.assertFalse(bl); bl = HiTypeHelper.Cast( boolean . class , "1" ); Assert.assertTrue(bl); bl = HiTypeHelper.Cast( boolean . class , "3" ); Assert.assertTrue(bl); bl = HiTypeHelper.Cast( boolean . class , "0" ); Assert.assertFalse(bl); bl = HiTypeHelper.Cast( boolean . class , "-1" ); Assert.assertFalse(bl); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?