文档章节

反射--(代码实现)

Jusenr
 Jusenr
发布于 2016/05/17 00:22
字数 498
阅读 4
收藏 0

 

  创建Student类

 1 public class Student {
 2 
 3     private String name ;
 4     
 5     private int age ;
 6 
 7     @Override
 8     public String toString() {
 9         return "Student [name=" + name + ", age=" + age + "]";
10     }
11 }

 

  创建StudentDemo类

 1 public class StudentDemo {
 2     
 3     public static void main(String[] args) throws Exception {
 4         
 5         // 创建Student对象
 6         Student s = new Student() ;
 7         
 8         // 给s这个对象的name属性赋值为"张三"
 9         PropertiesTools.setProperty(s, "name", "张三") ;
10         
11         // 给s这个对象的age属性赋值为23
12         PropertiesTools.setProperty(s, "age", 23) ;
13         
14         // 输出
15         System.out.println(s);
16         
17     }
18 }

 

  创建ReflectTest类

 1 import java.lang.reflect.Method;
 2 import java.util.ArrayList;
 3 
 4 public class ReflectTest {
 5     
 6     public static void main(String[] args) throws Exception {
 7         
 8         /**
 9          * 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
10          */
11         // 创建一个ArrayList集合
12         ArrayList<Integer> al = new ArrayList<Integer>() ;
13         
14         /**
15          * 当我们添加了泛型以后,就规定了该集合只能存储Integer类型的数据,而泛型这种机制只是在编译器有效,到了
16          * 运行期,这个泛型就不存在了,而这个动作叫做泛型擦除.由此可见在编译期好像完成不了,但是我们可以在运行期
17          * 对其进行操作,要在运行期完成,就需要使用反射
18          */
19         
20         // 添加
21         al.add(23) ;
22         
23         // 获取字节码文件对象
24         Class clazz = al.getClass() ;
25         
26         // 获取add方法
27         Method method = clazz.getDeclaredMethod("add", Object.class) ;
28         
29         // 调用方法
30         method.invoke(al, "你好") ;
31         
32         // 输出
33         System.out.println(al);
34     }
35 
36 }

 

  创建PropertiesTools类

 1 import java.lang.reflect.Field;
 2 
 3 public class PropertiesTools {
 4     
 5     /**
 6      * 作用: 是给obj这个对象的propertyName这个属性设置上value这个值
 7      * @param obj
 8      * @param propertyName
 9      * @param value
10      * @throws Exception 
11      */
12     public static void setProperty(Object obj , String propertyName , Object value) throws Exception{
13         
14         // 获取obj这个对象对应的字节码文件对象
15         Class clazz = obj.getClass() ;
16         
17         // 获取propertyName这个属性
18         Field field = clazz.getDeclaredField(propertyName) ;
19         
20         // 取消语法检查
21         field.setAccessible(true) ;
22         
23         // 调用方法赋值
24         field.set(obj, value) ;
25     }
26 }

 

© 著作权归作者所有

共有 人打赏支持
Jusenr
粉丝 0
博文 20
码字总数 10876
作品 0
西安
Android工程师
私信 提问
JavaSE_8系列博客——专家之路(一)---Java反射的总结

先来四个基本问题: 一、什么是反射(what)? 生活中的反射 百科定义:反射(外文名reflection),指的是声波、光波或其他电磁波遇到别的媒质分界面而部分仍在原物质中传播的现象。如光的反射...

u011500356
2017/10/22
0
0
Unity-Shader(三)高光反射&Blinn-Phong光照模型

先看一下基本光照模型中的高光反射部分的计算公式: 逐顶点光照实现 高光反射 分析 在Properties语义块中声明了三个属性: _Specular用来控制材质的高光反射的颜色 _Gloss用于控制高光区域的...

带头小哥哥
09/03
0
0
C#语法——反射,架构师的入门基础。

前言 编程其实就是写代码,而写代码目的就是实现业务,所以,语法和框架也是为了实现业务而存在的。因此,不管多么高大上的目标,实质上都是业务。 所以,我认为不要把写代码上升到科学的高度...

kiba518
08/27
0
0
Java面试题精编版—反射

—动力节点java   面试题   什么是reflection?其他语言有这种特点吗?   答案:Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行...

忻峰作浪
2016/11/21
8
0
工作中常用到的Java反射

这次提到的Java反射涉及的代码比较多。因为工作中经常用到反射,对代码做了很多抽象以及过滤器。虽然代码量很多,但是简单易用,过滤插件也易修改。 下面介绍下工作中哪些地方比较容易用到反...

李岩飞
2016/11/03
5.5K
7

没有更多内容

加载失败,请刷新页面

加载更多

用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
4
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
3
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
4
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部