Java基本数据类型的Class问题_蓝色D风车的博客-程序员秘密_java基本类型class

技术标签: Java  Class对象  基本数据类型  


问题发现:项目需求,在调用第三方接口时,规定请求报文体为XML,所以需要将实体Bean或POJO转成XML的形式,我使用了XStream来完成序列化转换,其中因为驼峰命名的字段名跟接口报文规定的字段有所出入或者说完全不同,如代码中字段名为posId,但接口中定为pos_id,所以调用XStram的api,alias方法或者@XStreamAlias注解,拿alias方法来说,有两个参数,别名(String)和所要别名字段的Class类对象,所以我要将整个Bean别名,传该Bean的Class即可,如:
xStreamForReqData.alias("business_trans", xmlData.getClass());
要将String的字段别名,传(String字段).class即可。但对于int或者其他基本类型的字段来说,本以为应该转不了的,因为认为基本类型没有Class,但事实发现是可以的,如下为对基本类型字段起别名

    @XStreamAlias("pos_id")
    private int posId;

转化后的报文,结果说明可行。

<?xml version='1.0' encoding='GBK'?><business_trans>
  <request_type>barcode_pay_request</request_type>
  <isspid>000000</isspid>
  <pos_id>0</pos_id>
  <store_id>0000</store_id>
  <pos_seq>00000</pos_seq>
  <system_id>00000</system_id>
  <barcode_pay_request>
    <barcode_info>00000000000</barcode_info>
    <tx_amt>1</tx_amt>
    <goods_detail>{"goods_detail":[{"goods_name":"红烧肉","quantity":"1","price":1,"goods_id":"2018112910076000000050624008"}]}</goods_detail>
  </barcode_pay_request>
</business_trans>

难道说基本类型也有Class对象?


证明:
查看JDK API的Class,发现文档中有说明,


“原始Java类型( boolean , byte , char , short , int , long , float和double ),和关键字void也表示为类对象。 ”
我们知道对于对象来说,可以直接使用对象.getClass()、Class.forName(className)或者类名.class都可以获取Class实例。
但是我们的基本数据类型,就没有类的权限定名,也没有getClass方法。
那么如何使用Class类来表示基本数据类型的Class实例?然后以Int为例,我查看了Integer的文档说明,发现有一个TYPE字段的说明

并查看Integer源码

    /**
     * The {@code Class} instance representing the primitive type  
     * {@code int}.
     *
     * @since   JDK1.1
     */
    @SuppressWarnings("unchecked")
    public static final Class<Integer>  TYPE = (Class<Integer>) Class
.getPrimitiveClass("int");          

然后实践,我们int.classs是可以获取到它的Class实例的,然后经过测试,发现int的Class实例、Integer.TYPE和Integer.class三者之间的关系如下:

    @Test
    public void test() {
        System.out.println("int.class == Integer.TYPE : " + (int.class == Integer.TYPE));
        System.out.println("int.class == Integer.class : " + (int.class == Integer.class));
    }


总结说明:
byte,short,int,long,char,float,double,boolean,void关键字
上述8种类型和void关键字,都有class属性.
表示int的Class对象: Class clz = int.class;
表示boolean的Class对象:  Class clz = boolean.class;
表示void的Class对象:Class clz = void.class;
在基本数据类型的包装器中都有这样一个常量:TYPE,表示的是该包装器对应的基本数据类型的Class实例。
但同时需注意基本数据类型和其包装器类型是不同的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/H_233/article/details/84947339

智能推荐

mysql管理工具 hs,dbeaver: DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybas..._左脚刹车右脚油门的博客-程序员秘密

DBeaverFree multi-platform database tool for developers, SQL programmers, database administrators and analysts.Supports any database which has JDBC driver (which basically means - ANY database). EE ve...

Linux(CentOS7)系统中部署Django web框架_ciguaxi2841的博客-程序员秘密

1. 概述 github项目地址:https://github.com/superwujc 尊重原创,欢迎转载,注明出处:https://my.oschina.net/superwjc/blog/3003027 Django服务框架在逻辑上可以分为web层与数据库层:web前端通过实现...

CSS图片保持原比例_QH~LYY的博客-程序员秘密_css保持图片比例

1. 图片的宽高比例都是不确定的,采用以下方式img{ object-fit: cover;}img的宽度width只要你设置了,他就会自动按比例缩放高度。当然,反过来设置了height也是同理。2. 下面说说object-fit这是css3属性,用来指定可替换元素的内容应该如何适应到其使用的高度和宽度确定的框,属性可选值有五种:fill, cover, contain, none, scale-downcontain被替换的内容将被缩放,以在填充元素的内容框时保持其宽高比。

九度OJ小结_weixin_30878501的博客-程序员秘密

1. 高精度问题  可参考题目题目1137:浮点数加法 http://ac.jobdu.com/problem.php?pid=1137  对于高精度问题可以考虑使用结构体。上述为浮点数加法,因此该结构体可以具有保存小数部分以及整数部分的成员变量,使用数组进行保存。于此同时还要记录下所保存数据的长度,因此还应当有两个int变量,保存整数部分长度和保存小数部分长度。 ...

将Ubuntu安装到U盘_leoSong.的博客-程序员秘密_u盘安装ubuntu

将Ubuntu安装到U盘   将Ubuntu等linux系统安装到u盘,随身携带,不管走到哪里,随便找台电脑插上就能使用自己的系统和应用程序。## 工具/原料 ##- U盘两个,一个用于制作启动盘(大于2G即可),另一个用于安装系统(大于8G,越大越好)- 电脑- Ubuntu ISO文件方法/步骤首先制作启动盘,下载UltraISO,和ubuntu系统镜像文件(网上资源很多);...

百度富文本编辑器ueditor支持上传mp3格式等音频文件的方法_Missy Peng的博客-程序员秘密_ueditor 音频

百度富文本编辑器ueditor算得上比较强大的了,但是有一个比较令人难受的问题,就是不支持本地上传音频文件。ueditor自带的mp3功能是直接在百度音乐里面搜索加进去的,显而易见这个不是我们想要的,我们需要能够上传自制的MP3音频格式的文件。那么如何实现呐,下面介绍一种方法:分析其实ueditor的视频上传功能是可以上传音频文件的,只是在加入到编辑器里面的时候,html结构不正确而已。所以,我们可以根据这个思路去找解决的方法。效果图先po一下效果图实现第一步:选择配置文件在页面加载.

随便推点

html侧边导航栏_吕招焕的博客-程序员秘密_侧边导航栏

效果html代码块==&lt;!DOCTYPE html&gt;&lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;侧边导航栏&lt;/title&gt; &lt;link href="https://unpkg.com/[email protected]/dist/css/ionicons....

arthas的核心原理浅析_我不是文盲的博客-程序员秘密_arthas原理

Arthas 等 Java 诊断工具核心原理浅析 项目地址看了会 arthas 源码,结合资料 。用一个小 demo 展示下 arthas 的核心实现java instrument agent + ASM新建一个普通的java项目,包结构如下三个包 :target 目标类 模拟平时要维护的服务client 客户端 模拟arthas客户端agent 代理程序 客户端挂载target 再执行 target 的jar包 ,提供修改字节码等功能主要执行流.

python3如何构建文本向量_醉小义的博客-程序员秘密_python 文本向量

import reimport collectionswords = ''' 钟声响起归家的讯号 在他生命里 仿佛带点唏嘘 黑色肌肤给他的意义 是一生奉献 肤色斗争中 年月把拥有变做失去 疲倦的双眼带着期望 今天只有残留的躯壳 迎接光辉岁月 风雨中抱紧自由 一生经过彷徨的挣扎 自信可改变未来 ...

linux 命令中英文对照,收集_weixin_30326745的博客-程序员秘密

linux 命令中英文对照,收集linux 命令英文全文Is Linux CLI case-sensitive?The answer is, yes. If you try to run LS instead of ls, it would display an error. There are some advantages of using a case-sensi...

HashMap源码入门学习(JDK1.8)_AmVilCres的博客-程序员秘密

hashMap数据结构&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hashMap采用数组+链表的存储方式,数组的每个元素存储的是一个Node节点,该节点是一个静态内部类,有4个属性,如图:hash :用于存储hash算法计算出来的hash值,该结果需要参与数组下标的计算(下面会介绍)key : 程序put的Key值value:程序put的Value值next:记录链表的下一个节点...

vslam从入门到如土:ubuntu18环境下配置YOLOv5_加葱casso的博客-程序员秘密

笔者配置:拯救者R7000PCPU:5800HGPU:30601.anaconda环境配置#创建conda环境,python=3.8conda create --name yolov5 python=3.8#进入yolov5环境conda activate yolov52.下载yolov5GitHub - ultralytics/yolov5: YOLOv5 ???? in PyTorch &gt; ONNX &gt; CoreML &gt; TFLitegit c