文档章节

通过get、set方法,动态生成对象

 勤奋的码农
发布于 2013/03/22 17:28
字数 258
阅读 1051
收藏 8

    最近在看Java的反射,把学习的东西整理一下,大家共同研究,有需要改进的地方,请大家指正。

    

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectionTest {
	public static void main(String args[]) {
		try {
			//通过反射获得类
			Class clazz = Class.forName("User");
			//实例化类
			Object obj = clazz.newInstance();
			//获得类的所有属性
			Field[] fields = clazz.getDeclaredFields();
			
			for(Field f : fields){
				PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);  
				//获得写方法
				Method wM = pd.getWriteMethod();
				//获得读方法  
				Method rM = pd.getReadMethod();
				//获得方法的参数,因为是标准的set方法,所以只取第一个参数
				Class[] classes = wM.getParameterTypes();
				//判断参数不为空,则只有一个
				if(classes != null && classes.length == 1){
					//判断参数类型
					if(classes[0].equals(String.class)){
						//调用set方法,传参
						wM.invoke(obj, "Jack");
						//调用get方法,获得返回值
						String str = (String) rM.invoke(obj);
						System.out.println("Name is : " + str);
					}
					if(classes[0].equals(int.class)){
						wM.invoke(obj, 2);
						Integer num = (Integer) rM.invoke(obj);
						System.out.println("Age is : " + num);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

class User {
	private String Name;
	private int age;

	public String getName() {
		return Name;
	}

	public void setName(String name) {
		Name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

© 著作权归作者所有

粉丝 3
博文 9
码字总数 2016
作品 0
海淀
高级程序员
私信 提问
eric_1989/jfire-codejson

Jfire-codejson框架 标签: 最高性能 Json [TOC] ##框架优点 性能强劲 codejson是迄今为止最为强大的json框架.性能为fastjson的2.1倍,jackson2的1.8倍,gson的6.7倍。下图为基准测试数据 自由...

eric_1989
2015/11/15
0
0
用AOP思想改造一个服务器的数据存储

背景是有一个游戏服务器一直以来都是写SQL的, 后来改过一段时间的redis, 用的是别的员工写的类orm方式将实体类型映射成各种key-value对进行写入, 但是仍有一个缺点就是需要在增删改的时候显式...

陈惊蛰
2018/08/19
0
0
CGlib使用笔记

CGlib,即Code Generation Library,是Java中广泛使用的动态代理类库,尤其是AOP框架。相比于JDK动态代理,它不要求被代理的类实现一个或多个接口,它的底层通过一个小而快的字节码处理框架A...

JoeyXie
2016/01/24
212
3
iOS底层原理总结 - 关联对象实现原理

面试题 Category能否添加成员变量?如果可以,如何给Category添加成员变量? 答:不能直接添加成员变量,但是可以通过runtime的方式间接实现添加成员变量的效果。 RunTime为Category动态关联...

xx_cc
2018/05/14
0
0
Java 大白话讲解设计模式之 -- 代理模式

声明:原创作品,转载请注明出处https://www.jianshu.com/p/e4c1e6b734ad 今天来总结下代理模式,所谓“代理”,顾名思义就是代替你处理某事。当我们无法直接做某事的时候就可以创建一个代理...

蛇发女妖
2018/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Protocol Buffers 简介

文档编辑和持续集成状态: 本文档的 Protocol Buffer 的中文文档使用的是 Asciidoctor 进行编排的 http://docs.ossez.com/protocol-buffers-docs/index.html(本 WIKI 中的内容将会与在线发布...

honeymoose
今天
4
0
uniapp + bootstrapvue 移动/PC 一套搞定 (一)配置bootstrapvue

1.准备文件 自己到DCloud官网: http://dcloud.io/ 去下载官方的IDE Hbuilder,新建一个空的uniapp项目即可。 uniapp框架自带优化的vue,我们仅仅需要准备以下三个文件: bootstrap.min.css ...

panyunxing
今天
12
0
Android Camera原理之camera service类与接口关系

camera service主要是指 frameworks/av/services/camera/下面的代码,最近在看这一块的代码,为了更好地理清这一块的代码,也为了后续学习camera方便一些,我觉得很有必要理一下这一块的整体...

天王盖地虎626
今天
6
0
Golang学习笔记

[TOC] Golang学习笔记 这个学习笔记是最早在1.初,版本左右的时候写的,和当前最新的版本可能会有较大的差异. 因为成文比较早,文章里面又有很多自己的见解,有些东西当时理解的不太透彻可能写错...

我爱吃炒鸡
今天
21
0
科技赋能成效显著!金融壹账通两大赋能项目荣获IDC大奖

7月19日,2019IDC中国未来金融论坛曁颁奖典礼于北京举办。由金融壹账通赋能的长春农商银行多人视频面审智能风控系统、包头农商银行互联网银行SaaS服务两大项目因在项目的创新性、技术领先性、...

IFTNews
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部