前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何通过反射获取属性的名字和属性类型

如何通过反射获取属性的名字和属性类型

作者头像
凯哥Java
发布于 2022-12-16 10:03:37
发布于 2022-12-16 10:03:37
4.1K00
代码可运行
举报
文章被收录于专栏:凯哥Java凯哥Java
运行总次数:0
代码可运行

提出问题:

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

反射是java中一个很重要的特性,在不知道类中信息的时候,利用反射我们可以获取到类中所有的信息,例如属性名,属性类型,方法名,还可以执行类中的方法,很强大的,在框架中大多数也是采用反射获取类中的信息。以前的知识只是知道反射可以破坏单例(因为反射可以获取到类中的所有信息,构造方法也不例外),但是现实中没有哪个程序员写完了单例模式,在用反射来破坏单例吧…… 在说反射前先说一个在反射中很重要的类Class,对这个类的理解:是所有类的类(听到这句话很难理解),可能很难理解,所有的类在这个Class类前都可以看作是Class的实例,包括Object类,在Class面前的类都是他的对象。对这个理解了,那么下面的反射就可以很容易的想通了。

实例:

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

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

获得属性信息的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void getField(Object object) {
        //获得类
        Class clazz = object.getClass();
        // 获取实体类的所有属性信息,返回Field数组
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field);
        }
    }

测试输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private int com_domain.Users.id
private java.lang.String com_domain.Users.name
private java.lang.String com_domain.Users.password
private int com_domain.Users.aid

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

也可以直接获取到属性的类型,在Fileld类中有一个getGenericType方法: 在前面的for循环中加入下面这句话:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String type = field.getGenericType().toString();

输出的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int
class java.lang.String
class java.lang.String
int

独立获取属性名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String name = field.getName();

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
id
name
password
aid
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 反射机制详解
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/68947735
程序员徐公
2018/09/18
3550
关于Java中泛型、反射和注解的扫盲篇
  泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码。通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类型,其核心目标是为了解决容器类型在编译时安全检查的问题。   泛型:一般用在类、方法、接口中,叫做泛型类、泛型接口、泛型方法
程序员波特
2024/01/19
2640
Java-反射
参考:https://mp.weixin.qq.com/s/UYqPCmo2vpAibJPh6cupLw
android_薛之涛
2018/12/25
5150
Java反射的常见用法
反射的常见用法有三类,第一类是“查看”,比如输入某个类的属性方法等信息,第二类是“装载“,比如装载指定的类到内存里,第三类是“调用”,比如通过传入参数,调用指定的方法。
用户1153489
2020/02/18
3790
初学者第57节之反射
反射是一种功能强大且复杂的机制。它主要是动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
用户5224393
2019/08/20
2540
【小家Java】你真的了解Java泛型参数吗?细说java.lang.reflect.Type(ParameterizedType、TypeVariable、WildcardType...)
咋一看标题,你可能会说。不就是泛型吗,平时都使用着呢,没什么难的吧。 感觉了解了,但是真正的深入才知道自己了解甚少!
YourBatman
2019/09/03
3.2K0
【小家Java】你真的了解Java泛型参数吗?细说java.lang.reflect.Type(ParameterizedType、TypeVariable、WildcardType...)
java之反射机制
假设现在我们有一张动漫的图片,我们通过这张图片,在大脑中搜索有关记忆,就清楚这张图片是什么动漫里的谁;假设我们现在有一个名字,在大脑中搜索有关记忆,就自然而然地想到了该名字人物的具体形象,这种思维过程就是反射。
西西嘛呦
2020/08/26
3150
Java基础(二十三):反射机制
(1)class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类 (2)interface:接口 (3)[]:数组 (4)enum:枚举在这里插入代码片 (5)annotation:注解@interface (6)primitive type:基本数据类型 (7)void
冬天vs不冷
2025/01/21
1130
Java基础(二十三):反射机制
ORM与反射
对象关系模型 关系模型(数据库表): 表、字段、字段类型 对象模型(java实体类):类、属性、属性类型 通过ORM框架解除模型之间的阻抗。
Java阿呆
2020/11/04
4750
Java反射机制开发经验总结
我在实际项目当中有经常用到反射机制,故而将学会的反射用法做一些汇总笔记,当做以后复盘所用。
朱季谦
2021/07/13
4060
深入理解 Java 反射:Field (成员变量)
本文介绍了Java中的反射机制,包括Class、Method、Field、Constructor等类以及它们的方法和用途。同时,还讲解了在Java中如何通过反射机制来获取类的详细信息,以及通过反射来创建对象实例。此外,还探讨了Java中的序列化与反序列化,以及如何在序列化过程中处理异常情况。最后,介绍了Java中的反射机制在实际开发中的应用场景,包括如何通过反射机制来增强代码的灵活性和可维护性,以及如何解决Java中的序列化和反序列化问题。
张拭心 shixinzhang
2018/01/08
7.2K0
深入理解 Java 反射:Field (成员变量)
反射基础之Field
java.lang.reflect.Field 类的方法可以查询字段的信息。比如:名字,类型,修饰符和注解。同样也有方法可以动态访问和修改字段的值。
代码拾遗
2018/07/24
9190
Java反射机制详解
该文章介绍了如何通过反射机制在Java中获取类的元数据信息,包括类名、构造函数、成员变量以及方法。同时,文章还介绍了反射机制在实际开发中的应用场景,例如在Web后端开发中,通过反射机制动态加载Java类,实现灵活的业务扩展。反射机制虽然功能强大,但是也有一定的性能开销,因此在实际开发中应该谨慎使用。
Java后端工程师
2017/12/19
1.5K0
Java字节码与反射机制
字节码(Byte Code)是Java语言跨平台特性的重要保障,也是反射机制的重要基础。通过反射机制,我们不仅能看到一个类的属性和方法,还能在一个类里调用另外一个类的方法,但前提是我们得有相关类的字节码文件(也就是.class文件)。
用户1153489
2021/01/29
7710
通用Dao模板--所有表一个模板即可
封装了jdbc的一些对数据库的基本操作,不过当了为了应付课设,写的太着急了,有很多地方都可以优化,有兴趣的可以优化一下,复制就可以使用。主要原理就是反射和泛型,有兴趣的可以看看代码,想直接用的复制就可以用,能帮你节省掉写基础增删改查的时间
小王不头秃
2024/06/19
1920
Java反射机制
        JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
sunonzj
2022/06/21
6000
Java反射机制
Java基础之反射(非常重要)
(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))
Java团长
2018/08/06
6000
Spring杂谈 | 你真的了解泛型吗?从java的Type到Spring的ResolvableType
Type是Java 编程语言中所有类型的公共高级接口(官方解释),也就是Java中所有类型的“爹”;其中,“所有类型”的描述尤为值得关注。它并不是我们平常工作中经常使用的 int、String、List、Map等数据类型,而是从Java语言角度来说,对基本类型、引用类型向上的抽象;
程序员DMZ
2020/07/06
2.3K0
Java反射真正的详解,学以致用,实战案例,近万字长文,不读后悔
全文共 7500 字左右,案例均可运行,阅读时间大约需要20分钟左右,如有问题,请留言或发送邮件(nzc_wyh@163.com)。
宁在春
2022/10/31
7070
Java反射真正的详解,学以致用,实战案例,近万字长文,不读后悔
JavaSE(十)之反射
开始接触的时候可能大家都会很模糊到底什么是反射,大家都以为这个东西不重要,其实很重要的,几乎所有的框架都要用到反射,增加灵活度。到了后面几乎动不动就要用到反射。 首先我们先来认识一下对象 学生----->抽象----->Student 表示学生   Student = ....... 那我们的反射中的Class呢? 类型----->抽象----->Class(反射的入口破) java.lang.class    表示java中的类型   Class c = Student.Class   Class c =
用户1195962
2018/01/18
6070
JavaSE(十)之反射
相关推荐
Java 反射机制详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验