因为在很多情况下,如果要转换的数据为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. 0.4 Nomenclature and notation

  2. PicGo+CloudFire搭建免费图床

    目录 CloudFire对象存储 创建bucket 配置域名 配置 Bucket 访问 API PicGO配置 参考博客 CloudFire对象存储 | CloudFire提供对象存储服务,每个月有1 ...

  3. C++之OpenCV入门到提高004:Mat 对象的使用

    一.介绍 今天是这个系列<C++之 Opencv 入门到提高>得第四篇文章.这篇文章很简单,介绍如何使用 Mat 对象来实例化图像实例,了解它的构造函数和常用的方法,这是基础,为以后的学习 ...

  4. MNN框架在Win10上的部署,支持OpenGL和Vulkan

    上篇记录了之前在win10上部署的流程,不过在camke的时候没有选择支持OpenGL和Vulkan.这里重新按照官方的语雀文档重新进行支持OpenGL和Vulkan的编译,简单做个记录.如果有其他的 ...

  5. docker新建自定义网桥,实现不同主机容器互联

    不同主机间的容器网络互联,网络上的所有教程都是通过open vswitch等虚拟网桥方式实现的,但是最近本人发现可以直接通过配置网桥实现网络的互联,而不用安装配置open vswitch.在这里分享一 ...

  6. python 快速比较大文件的元素异同之处

    0x00 问题 0x01 解决方法 0x02 list最多可以存放多少条数据呢? 0x03 集合set的操作 0x00 问题 假如,在有两个大文件分别存储了大量的数据,数据其实很简单就是一堆字符串,每 ...

  7. PHPstorm配置webserver

    phpstorm自带了一个web server,我们可以直接在IDE中直接运行调试代码,非常方便. 配置interpreter 工程第一次运行还要配置一下php的解释器,我电脑的配置如下: 可以看到代 ...

  8. 关于xml文件解析时'&'不能被解析的问题

    Bug情况:在解析xml文件的时候,&字符解析错误 解决方式:将符号进行转义

  9. Winform跨线程访问报错问题解决

    ` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...

  10. 《JavaScript 模式》读书笔记(6)— 代码复用模式1

    我们有开始进入新篇章了.这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容.对于前端进阶来说,是很重要的基础知识.这一篇内容会对原型. 继承有很深入的讲解.我也 ...