文档章节

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

秦学强
 秦学强
发布于 2017/07/09 22:03
字数 420
阅读 5
收藏 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

本文转载自:http://blog.csdn.net/u014481096/article/details/51444010

共有 人打赏支持
秦学强

秦学强

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

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

Java-老刘
05/15
0
0
Java面试基础篇——第十篇:反射的原理

什么是Java的反射机制?指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能调用它的任意一个方法。这种动态获取信息,以及动态调用对象方法的功能叫Jav...

developlee的潇洒人生
07/24
0
0
Java反射机制(未完成,还缺最后一个)

1、背景 1)Reflection也就是反射 是Java被视为动态(或准动态)语言的一个关键性质 2)反射机制指的是程序在运行时能够获取任何类的内部所有信息 2、实现功能概述 1)只要给定类的全名,即可...

萧小蚁
2015/05/03
0
0
从 java bean 的内省到 dbutils 的应用

java bean 内省的基础 java bean 的内省,其实可以算是反射的一种基础应用,关于 java 的反射,无非就是获得对应的类、属性、方法、修饰符等的应用,对于 java 的反射探讨,可以点击参考 ja...

peiquan
07/04
0
0
最最最常见的Java面试题总结——第二周

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性   String类中使用字符数组:保存字符串,所以String对象是...

Amsour丶
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
31分钟前
1
0
OSChina 周四乱弹 —— 上帝对我单身年限的惩罚越来越长了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享张卫健的单曲《身体健康》 《身体健康》- 张卫健 手机党少年们想听歌,请使劲儿戳(这里) 昨天是重阳节咯, 可惜小小编辑总是晚...

小小编辑
33分钟前
6
0
django rest framework 外键序列化方法与问题总结

django rest framework 外键序列化方法与问题总结 当借口中需要出现一对多关系的时候,我们可以用rest_framwork的序列化功能来处理,代码如下. # models.pyfrom django.db import modelscl...

_Change_
昨天
1
0
SingleNumber136 leetCode

Given a non-empty array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you im......

woshixin
昨天
1
0
String ,  StringBuffer ,  StringBuilder的区别

String , StringBuffer , StringBuilder的区别 String 首先,String 是用来表示一个字符串常量的,它是一个不可变对象,意味着,一旦我们创建了某个字符串之后,就不能再改变它的值了,我们可...

tsmyk0715
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部