0004JDK源码分析之如何反射类的私有属性和私有方法

Posted Java框架源码分析

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0004JDK源码分析之如何反射类的私有属性和私有方法相关的知识,希望对你有一定的参考价值。


本文将介绍如何反射类的私有属性和私有方法。

本文大纲:

       一、为什么要反射私有属性和私有方法?

       二、如何反射呢?

       三、案例分析


一、为什么要反射私有属性和方法?

你或许会疑问,类的私有的属性和私有方法可以被反射吗?答案是:可以。但是一般情况下不行的,需要修改类的访问检查,由于安全问题默认是不能访问的。很多情况下,我们需要反射私有属性和方法,比如序列化对象的时候,Spring的反射注入等。反射机制可以简化我们客户端的编码,使得代码更加简洁,易于拓展。


二、如何反射呢?

反射使用的是java.lang.reflect包下的类,如Field、Method等类,这些封装了操作类的常用方法。如果要反射私有属性和私有方法需要设置setAccessible(true),取消访问检查。


三、案例分析

毋容置疑,我们的案例就是反射一个类的私有属性和方法,比如我们有一个Cat的类,类有一个私有的String类型的属性、一个私有的方法以及一个取得私有属性的值的公开方法(用于校验是否反射注入成功),代码如下:


【0004】JDK源码分析之如何反射类的私有属性和私有方法

接下来我们编写单元测试进行测试,单元测试类如下:

【0004】JDK源码分析之如何反射类的私有属性和私有方法

【0004】JDK源码分析之如何反射类的私有属性和私有方法

单元测试类的运行结果如下图所示:

1、反射私有属性的运行结果

2、反射私有方法的运行结果如下图所示,由下图可知,反射并调用私有方法成功。

四、总结

         本文十分简短,主要描述了一个反射私有属性和私有方法的小案例。在平时开发的时候,或者很少使用到,但是在设计框架或阅读框架的时候,则经常会看到。感谢你的耐心阅读,谢谢。

以上是关于0004JDK源码分析之如何反射类的私有属性和私有方法的主要内容,如果未能解决你的问题,请参考以下文章

Java中子类继承了父类的私有属性及方法吗?

Java之反射 — 用法及原理

第43题JAVA高级技术-反射实战3(动态设置类的私有属性)

集合框架JDK1.8源码分析之Collections && Arrays

java里一个私有的属性如何在其他类里面进行访问?

转载: 通过反射操作类的私有属性