因为在很多情况下,如果要转换的数据为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. visual studio当中动态库和静态库的联系

    一.为什么要写这篇博客 公司需要调用MNN框架编译之后的动态库和静态库文件来在另外一台没有编译过MNN框架上的机器运行对应的程序,比如说人体关键点检测之类的程序,这个时候了解静态库和动态库的关系就很有 ...

  2. MySQL原理简介—8.MySQL并发事务处理

    大纲 1.简单总结增删改SQL语句的实现原理 2.多个事务同时执行的场景遇到的问题 3.多个事务并发更新或查询时可能出现的问题 4.SQL标准中对事务的4个隔离级别 5.MySQL是如何支持4种事务隔 ...

  3. 使用 Antlr 开发领域语言

    高 尚 (gaoshang1999@163.com), 软件工程师, 中国农业银行软件开发中心 简介: Antlr 是一个基于 Java 开发的功能强大的语言识别工具,Antlr 以其简介的语法和高速 ...

  4. Python消息队列之Huey

    缘起: 之前在Python中使用最多的就是Celery, 同样的在这次项目中使用了Celery+eventlet的方式,但是由于具体执行的逻辑是使用的异步编写的, 当时就出现了一个问题,当使用http ...

  5. Codeforces Round 992 (Div. 2) 解题报告

    比赛地址: https://codeforces.com/contest/2040 A. Game of Division 题目 https://codeforces.com/contest/2040 ...

  6. 远程连接利器:玩转MobaXterm

    今天这篇文章轻松不烧脑,主要是想和大家分享一下我在工作中常用的远程管理工具--MobaXterm.这款工具不仅功能强大,而且在日常的远程操作中极为高效,特别适合用来管理远程服务器.MobaXterm结 ...

  7. 从 CephFS 到 JuiceFS:同程旅游亿级文件存储平台构建之路

    随着公司业务的快速发展,同程旅行的非结构化的数据突破 10 亿,在 2022 年,同程首先完成了对象存储服务的建设.当时,分布式文件系统方面,同程使用的是 CephFS,随着数据量的持续增长,Ceph ...

  8. Vue3 面试题 (2023-09-26更新)

    Vue3 对比 Vue2 做了那些改进? 1. 响应式系统 vue2 中使用的 Object.defineProperty 实现的响应式,劫持整个对象,递归遍历所有属性,给每个属性添加 getter ...

  9. 【Javaweb】JSP标准标签库

    目录 JSTL 1.什么是JSTL 2.版本 3.标签函数库 4.优点 JSTL基本概念 标签(Tag) 标签库(Tag library) 标签库描述文件(Tag Library Descriptor ...

  10. vertx 获取请求参数

    表单登录(GET)   <form action="/login">   <input type="text" name="user ...