因为在很多情况下,如果要转换的数据为null,调用者期望的是返回默认值.

系统自动提供的默认值不能满足我们的需求,例如int的默认值为0,但是在sql查询中,如果查询失败,我们期望的是小于0的值,例如Select Count(1) from table1这样的操作.

为此,我提供了取得数据类型默认值的扩展函数

目标:

1)实现根据自己需要返回基本类型的默认值

2) 性能不要太差

1: 接口:

public static <T> T GetDefault(Class<T> t)

2: 实现

/**
* 获取数据类型的默认值
* @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: 测试代码

	@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);
}

  

Java中的基本数据类型默认值扩展的更多相关文章

  1. java中8种数据类型和默认值所占字节数

    java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...

  2. JAVA中分为基本数据类型及引用数据类型

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

  3. 二、java中的基本数据类型

    总结: 1.java中的基本数据类型有byte.short.int.long;float.double;char;boolean. 2.基本数据类型与1相对应分别占1.2.4.8;4.8;2;1.(单 ...

  4. Java中的变量数据类型补充

    Java中变量的数据类型的补充 变量按照数据类型进行分类 1.基本数据类型 数值型:①整数类型(byte,short,int,long)②浮点型(float,doubbe)③字符型(char)④布尔型 ...

  5. java 中的引用数据类型

    字符串String 在java 中,字符串不是基本数据类型,而是String 类的对象,当我们创建一个字符串的时候,真的是要使用new 来调用String 构造函数 String str = new ...

  6. java 中的基本数据类型

    1,  变量 Java是强类型语言, 对于每一种数据都定义了类型,基本数据类型分为数值型,字符型,布尔型.数值型又分为了整型和浮点型. 整型又分为byte, int, short long. 浮点型又 ...

  7. JAVA中分为基本数据类型和引用数据类型区别

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

  8. Java中的原生数据类型

    Java中的原生数据类型(Primitive DataType)共有8种: 1)整型:     使用int表示(32位).2)字节型: 使用byte表示(从-128到127之间的256个整数).3)短 ...

  9. Java中的基本数据类型和引用类型

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

  10. java中的基本数据类型一定存储在栈中吗?

    首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的. 下面让我们一起来分析一下原因: 基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型 ...

随机推荐

  1. 记录一个vscode无法ssh树莓派,但是mobaxterm可以ssh登录的问题

    一.为什么会遇到这个问题 帮别人开发一个树莓派小车的时候,买了一个新的树莓派3B,回来安装好桌面系统之后开启了ssh功能,便想开始使用vscode来ssh开发,省的后续一直要插着屏幕开发,很麻烦.但是 ...

  2. Flink CDC 实时同步 Oracle

    Flink CDC 系列文章 Flink CDC 实时同步 MySQL Flink CDC 实时同步 Oracle 准备工作 Oracle 数据库(version: 11g) 开启归档日志 sqlpl ...

  3. 链路追踪之Jaeger

    官方地址:https://www.jaegertracing.io/ [安装] 官方提供了两个安装方式, 1. 基于二进制(https://www.jaegertracing.io/download/ ...

  4. 鸿蒙NEXT元服务:收藏、卡片、用户协议、隐私声明、分享链接、评分与评论

    相比应用,元服务的功能藏的比较深,这里记录一下常用功能的位置. 1.收藏(添加至我的服务) 打开元服务-->右上角四个点-->添加至我的服务-->手机滑到负一屏-->点击&qu ...

  5. Ubuntu实现SSH外网连接内网(反向隧道)

    应用场景: 如果你有Linux云主机(腾讯.华为等),且公司有一台只有内网IP (或动态IP) 的Linux工作机:你计划在家里工作时,通过家里的电脑连接公司的工作机 (且不想使用类似Teamview ...

  6. JAVA中ScheduledExecutorService的使用方法

    ScheduledExecutorService 简介 ScheduledExecutorService是 Java 中的一个接口,它是ExecutorService的子接口.它主要用于在给定的延迟之 ...

  7. sqlserver配置分发实现主备

    方案总体说明 本方案采用"发布-订阅模式" 由主服务器进行发布消息,备份服务器进行订阅 当主服务器数据发生变更时,就会发布消息,备份服务器读取消息进行同步更新,中间过程延迟比较短. ...

  8. 干掉EasyExcel!FastExcel初体验

    我们知道 EasyExcel 在作者从阿里离职之后就停止维护了,但在前两周 EasyExcel 原作者推出了他的升级版框架 FastExcel.以下是 FastExcel 的上手实战过程,带大家一起提 ...

  9. office文件所对应的的 Content-type类型总结

    最近做文件下载因为涉及到不同类型的文件,所以重新查阅了一下文件所对应的的content-type类型,好记性不如烂笔头,记录一下. 文件后缀 MIME TYPE .doc application/ms ...

  10. Spring Security OAuth2 - 自定义 OAuth2.0 令牌发放接口地址

    登录实现拿浏览器网页登录举例: 基于 OAuth2.0-密码模式 实现网页登录的本质就是浏览器通过 /oauth/token 接口将 用户名 和 密码 等信息传给后台, 然后后台验证通过后返回一个有效 ...