文档章节

通过java类的反射机制获取类的属性类型

秦学强
 秦学强
发布于 2017/07/09 22:03
字数 420
阅读 5
收藏 0
点赞 0
评论 0
import java.lang.reflect.Field;
import java.lang.reflect.Method;

Class<?> cls=Class.forName(className);//通过类的名称反射类
//Class<?> cls = Object.getClass();
Field field = cls.getDeclaredField("name");//根据属性名称获取单个属性
if (field.getGenericType().toString().equals("int")||field.getGenericType().toString().equals("class java.lang.Integer")){
	System.out.println("Integer type");
}
//下面是获取所有属性(取自网络,仅供参考)
for (Field field : fields) {// --for() begin
    System.out.println(field.getGenericType());//打印该类的所有属性类型
    // 如果类型是String
    if (field.getGenericType().toString().equals(
      "class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
     // 拿到该属性的gettet方法
     
     Method m = (Method) object.getClass().getMethod(
       "get" + getMethodName(field.getName()));
     String val = (String) m.invoke(object);// 调用getter方法获取属性值
     if (val != null) {
      System.out.println("String type:" + val);
     }
    }
    // 如果类型是Integer
    if (field.getGenericType().toString().equals(
      "class java.lang.Integer")) {
     Method m = (Method) object.getClass().getMethod(
       "get" + getMethodName(field.getName()));
     Integer val = (Integer) m.invoke(object);
     if (val != null) {
      System.out.println("Integer type:" + val);
     }
    }
    // 如果类型是Double
    if (field.getGenericType().toString().equals(
      "class java.lang.Double")) {
     Method m = (Method) object.getClass().getMethod(
       "get" + getMethodName(field.getName()));
     Double val = (Double) m.invoke(object);
     if (val != null) {
      System.out.println("Double type:" + val);
     }
    }
    // 如果类型是Boolean 是封装类
    if (field.getGenericType().toString().equals(
      "class java.lang.Boolean")) {
     Method m = (Method) object.getClass().getMethod(
       field.getName());
     Boolean val = (Boolean) m.invoke(object);
     if (val != null) {
      System.out.println("Boolean type:" + val);
     }
    }
    // 如果类型是boolean 基本数据类型不一样 这里有点说名如果定义名是 isXXX的 那就全都是isXXX的
    // 反射找不到getter的具体名
    if (field.getGenericType().toString().equals("boolean")) {
     Method m = (Method) object.getClass().getMethod(
       field.getName());
     Boolean val = (Boolean) m.invoke(object);
     if (val != null) {
      System.out.println("boolean type:" + val);
     }
    }
    // 如果类型是Date
    if (field.getGenericType().toString().equals(
      "class java.util.Date")) {
     Method m = (Method) object.getClass().getMethod(
       "get" + getMethodName(field.getName()));
     Date val = (Date) m.invoke(object);
     if (val != null) {
      System.out.println("Date type:" + val);
     }
    }
    // 如果类型是Short
    if (field.getGenericType().toString().equals(
      "class java.lang.Short")) {
     Method m = (Method) object.getClass().getMethod(
       "get" + getMethodName(field.getName()));
     Short val = (Short) m.invoke(object);
     if (val != null) {
      System.out.println("Short type:" + val);
     }
    }
    // 如果还需要其他的类型请自己做扩展
   }//for() --end

© 著作权归作者所有

共有 人打赏支持
秦学强

秦学强

粉丝 0
博文 69
码字总数 0
作品 0
海淀
程序员
Java基础之反射(非常重要)

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道...

Java-老刘 ⋅ 05/15 ⋅ 0

有一到五年开发经验的JAVA程序员需要掌握的知识与技能!

JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此...

java高级架构牛人 ⋅ 06/02 ⋅ 0

作为一个java程序员这些技能你都知道吗?

一、Java特点 1、 面向对象 尽管受到其前辈的影响,但Java没被设计成兼容其他语言源代码的程序。这允许Java开发组自由地从零开始。这样做的一个结果是,Java语言可以更直接、更易用、更实际的...

java高级架构牛人 ⋅ 05/23 ⋅ 0

Java编程语言高级特性入门学习——泛型、反射和注解!

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 06/02 ⋅ 0

对比两个对象同属性名的属性值是否一致

引言 由于有时会有需求,需要判断人员信息是否有修改,因为人员信息会有很多属性,一个个的进行if else难免会崩溃。因此,本文通过反射来实现该功能。 正文 JAVA反射机制是在运行状态中,对于...

AFinalDream ⋅ 05/05 ⋅ 0

Java反射改变Android属性

Java反射改变Android属性 在某些情况下,Android体系里面的某些对象没有对外提供针对某个属性或者类,方法公开的get或者set方法,但是项目需要对这些需要修改和调整。就需要使用Java的反射机...

zhangphil ⋅ 04/28 ⋅ 0

Java高级特性入门——泛型、反射和注解!

摘要: 只有掌握了Java的高级特性,这门语言才算真正地登堂入室。本文将带领大家一同了解Java语言的三个常用的高级特性——泛型、反射和注解。 专家简介: 澳明 ,阿里巴巴高级开发工程师,来...

Java高级架构 ⋅ 05/28 ⋅ 0

Java中getclass(),class()与iinstanceof的区别与联系

getclass()学过Python的同学肯定很熟悉,是不是有点像dict method?其实这个自省,JAVA中叫做反射,可以理解为在运行时期获取对象类型信息的操作,两者几乎相同。传统的编程方法要求程序员在编...

qq_39521554 ⋅ 04/30 ⋅ 0

Java高级特性入门——泛型、反射和注解

摘要: 只有掌握了Java的高级特性,这门语言才算真正地登堂入室。本文将带领大家一同了解Java语言的三个常用的高级特性——泛型、反射和注解。 数十款阿里云产品限时折扣中,赶紧点击这里,领...

阿里云云栖社区 ⋅ 05/15 ⋅ 0

Android JNI学习(四)——JNI的常用方法的中文API

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头 ⋅ 05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 51分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部