文档章节

反射--(代码实现)

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工程师
私信 提问
加载中
请先登录后再评论。
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.1K
3
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.6K
0
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.4K
16
代码生成器--Codgen

Codgen是一个基于数据库元数据模型,使用freemarker模板引擎来构建输出的代码生成器。freemarker的数据模型结构通常来说都是一个Map树状结构模型,codgen也不例外,它的数据模型这棵树的根节...

黄天政
2013/01/29
1.4W
2
数据库代码辅助工具--MaoCaiJun.Database

MaoCaiJun.DataBase 是一个用于 Microsoft Visual Studio 的数据库代码生成组件。它是基于 xml 文件的代码创建工具,支持sql2000,sql2005,sql2008,access, SQLite MaoCaiJun.Database 数据库...

mccj
2013/02/06
2.3K
1

没有更多内容

加载失败,请刷新页面

加载更多

15

15

不正经的大叔
48分钟前
13
0
如何在Python中附加文件? - How do you append to a file in Python?

问题: How do you append to the file instead of overwriting it? 您如何附加到文件而不是覆盖文件? Is there a special function that appends to the file? 有附加到文件的特殊功能吗?...

javail
今天
8
0
每个程序员应阅读的最具影响力的单一书籍是什么? [关闭]

问题: If you could go back in time and tell yourself to read a specific book at the beginning of your career as a developer, which book would it be? 如果你可以回到过去并告诉自己......

技术盛宴
今天
5
0
Spring Cloud系列之微服务介绍

相信我,请认真读完,点开每一个链接,或许你才能真正了解什么是微服务?什么是分布式?什么是云计算?绝对没有多余! 1 微服务 微服务架构是“新常态”。构建小型的、自包含的、随时可以运行...

冯文议
今天
6
0
在Visual Studio中使用Git [关闭] - Using Git with Visual Studio [closed]

问题: As a long-time Visual SourceSafe user (and hater) I was discussing switching to SVN with a colleague; 作为一个长期的Visual SourceSafe用户(和仇恨)我正在讨论与同事转换到S......

富含淀粉
今天
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部