博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过反射获取属性名和属性类型
阅读量:5884 次
发布时间:2019-06-19

本文共 1429 字,大约阅读时间需要 4 分钟。

提出问题:

还是泛型dao中遇到的问题,以往我们要查询数据库中表中的数据的时候,需要每张表都会写一个dao操作数据库,现在的需求是只写一个dao,这是个万能的dao,适用于所有的表,进行增删改查都可用。显然我们事先不知道要查哪个表,泛型dao的基本要求就是对所有的表都适用,这就需要我们动态的获取表名,基本思想可以是方法中传入一个类(前提是数据库中的表和实体类都是一一对应的)的实例,通过反射获取这个实体类中的属性名和属性类型,这就用到了java中反射这个特性。

反射是java中一个很重要的特性,在不知道类中信息的时候,利用反射我们可以获取到类中所有的信息,例如属性名,属性类型,方法名,还可以执行类中的方法,很强大的,在框架中大多数也是采用反射获取类中的信息。以前的知识只是知道反射可以破坏单例(因为反射可以获取到类中的所有信息,构造方法也不例外),但是现实中没有哪个程序员写完了单例模式,在用反射来破坏单例吧……

在说反射前先说一个在反射中很重要的类Class,对这个类的理解:是所有类的类(听到这句话很难理解),可能很难理解,所有的类在这个Class类前都可以看作是Class的实例,包括Object类,在Class面前的类都是他的对象。对这个理解了,那么下面的反射就可以很容易的想通了。

实例:

下面简单的介绍使用的方法,方法很简单,都是已经封装好的方法,直接调用即可

一个实体类:(贴张截图)都是私有的属性

获得属性信息的方法:

public static void getField(Object object) {        //获得类        Class clazz = object.getClass();        // 获取实体类的所有属性信息,返回Field数组        Field[] fields = clazz.getDeclaredFields();        for (Field field : fields) {            System.out.println(field);        }    }
测试输出:

private int com_domain.Users.idprivate java.lang.String com_domain.Users.nameprivate java.lang.String com_domain.Users.passwordprivate int com_domain.Users.aid
关于属性的信息都被获取到了,包括权限修饰符,属性类型,属性名,这里的String是java.lang.String,属性名和属性类型后面可以利用字符串截取获得实际想要的数据。

也可以直接获取到属性的类型,在Fileld类中有一个getGenericType方法:

在前面的for循环中加入下面这句话:

String type = field.getGenericType().toString();
输出的是:

intclass java.lang.Stringclass java.lang.Stringint
独立获取属性名:

String name = field.getName();
输出:

idnamepasswordaid

转载于:https://www.cnblogs.com/duzhentong/p/7816529.html

你可能感兴趣的文章
c语言全局变量和局部变量问题汇总
查看>>
scott权限
查看>>
Shell数值、字符串比较
查看>>
远程调用相关技术
查看>>
和Timesten有个约会--Timesten技术专栏系列(一)
查看>>
Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码
查看>>
系统架构设计师考试大纲
查看>>
XMPP协议介绍
查看>>
学习 TList 类的实现[2]
查看>>
BIND_MISMATCH导致过多VERSION COUNT的问题
查看>>
五个你必须知道的javascript和web debug技术
查看>>
Uva----------(11078)Open Credit System
查看>>
为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
查看>>
.net Framework各个版本之间的发展
查看>>
什么是Activity
查看>>
格式化输入输出
查看>>
[Hibernate] - Criteria Select
查看>>
Perl的debug小技巧
查看>>
2015第33周三
查看>>
linux c正则
查看>>