import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTester {
public Object copy(Object object) throws Exception{
/**
* 获得实体对象的运行时类
*/
Class<?> classType = object.getClass();
//System.out.println("the run class is:"+classType.getName());
/**
* 获得实体的构造方法
*/
Object objectCopy = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
/**
* getDeclaredFields()获得类的所有属性
* getFields()获得public类型的类的属性
*/
Field fields[] = classType.getDeclaredFields();
for(int i=0;i<fields.length;i++){
/**
* 取出第i个类的属性
* 例如:private java.lang.String Custom.name
*/
Field field=fields[i];
System.out.println("field:"+field);
String fieldName = field.getName();
/**
* 获得属性的名字
* 例如:name
*/
System.out.println("fieldName:"+fieldName);
/**
* 将属性名字的第一个字母大写例如name的n变成N
*/
String firstletter = fieldName.substring(0, 1).toUpperCase();
/**
* 得到getName
*/
String getMethodName = "get"+firstletter+fieldName.substring(1);
/**
* 得到setName
*/
String setMethodName = "set"+firstletter+fieldName.substring(1);
/**
* 得到getName()方法
*/
Method getMethod = classType.getMethod(getMethodName, new Class[]{});
Method setMethod = classType.getMethod(setMethodName, new Class[]{field.getType()});
/**
* 调用method的invoke()方法即执行原对象的getXXX()方法
*/
Object value = getMethod.invoke(object, new Object[]{});
System.out.println(fieldName+" :"+value);
/**
* 调用method的invoke()方法即执行原对象的setXXX()方法
*/
setMethod.invoke(object,new Object[]{value});
}
return objectCopy;
}
public static void main(String args[]) throws Exception{
Custom custom = new Custom("tom",22);
custom.setId(1);
Custom customcopy = (Custom)new ReflectTester().copy(custom);
System.out.println("copy information:"+customcopy.getId() + " " + customcopy.getName() + " " + custom.getAge());
}
}
/**
* the class
* @author Administrator
*
*/
class Custom{
private long id;
private String name;
private int age;
public Custom(){
}
/**
* Constructor
* @param name
* @param age
*/
public Custom(String name,int age){
this.name=name;
this.age=age;
}
/**
* the get and set method of fields
* @return
*/
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import java.lang.reflect.Method;
/**
* 联系invoke方法的使用
* @author Administrator
*
*/
public class InvokeTester {
public int add(int param1,int param2){
return param1+param2;
}
public String echo(String msg){
return "echo:"+msg;
}
public static void main(String [] args) throws Exception{
Class<?> classType = InvokeTester.class;
/**
* 下面为调用类的默认构造方法如果有多个构造方法,则用下面的方法实现
* classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
*/
Object invokeTester = classType.newInstance();
/**
* 获得get()方法
*/
Method addMethod = classType.getMethod("add", new Class[]{int.class,int.class});
/**
* 执行get()方法
*/
Object result = addMethod.invoke(invokeTester, new Object[]{new Integer(100),new Integer(200)});
System.out.println("the result is:" + (Integer)result);
Method echoMethod = classType.getMethod("echo", new Class[]{String.class});
Object echores = echoMethod.invoke(invokeTester, new Object[]{new String("hello world")});
System.out.println("echo result is:" + (String) echores);
}
}
分享到:
相关推荐
java反射机制列子
一段JAVA反射的代码。希望对你有帮助!
Java连接sql server 数据库 初学列子
java Swing ATM登陆取款小程序,,,, 源代码
关于Java的反射概念及列子 适应于新手的学习
java 200个经典列子 这里有200个java 语言写的经典列子 是java爱好者学习的好东西
LINQ资料+列子LINQ资料LINQ资料+列子LINQ资料
都是些简单的东西 对刚刚入门的Java学者有很大的帮助
java CMS 生成静态页面 通过后台发布来改变网站内容
非常好,而且实用的列子,是学习 Swing 是必须的小项目
JavaMvc编程模式列子.pdf
设计模式 Java列子演示
我写的简单的flex+java列子 由于上传限制我把包都删了 都是一些默认包 跟一个mysql jar包 希望跟能大家互相提高
jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考。 java 原生反射写法: try { Method m1 = department.getClass().getMethod("getEmployees"); Employee ...
包括JSONObject对象和字符串之间的转换 JSONArray集合与字符串之间的转换 以及JSON需要的所有JAR包
JAVA设计模式之抽象工厂模式,一个不错的列子,逻辑比好清晰,让你更好的理解抽象工厂
学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下
倍洽推送C#和java的写法,里面只有发送的简单列子,无需引用,但是推送链接需要自己到倍洽去注册使用
java编程100例,有很多的例子。各式各样的。