如何用反射创建实力对象?如何通过反射为上一个实例对象的x属性重新赋值为?

*```
package com.java.reflect;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
class Point{
private int x;
private int y;
public Point(int x,int y) {
this.x=x;
this.y=y;
}
@Override
public String toString() {
return “Point [x=” + x + “, y=” + y + “]”;
}
}
public class TestReflect01 {
/**创建类的实例对象
* @param cls 要创建的实例对象对象的字节码类型
* @param paramTypes 对应的构造方法中参数类型
* @param args 执行构造方法时要传入的实际参数类型
* */

static <T>T doCreateInstance(
		Class<T> cls,
		Class<?>[] paramTypes,
		Object[] args)throws Exception{
	Constructor<T> con=
	cls.getDeclaredConstructor(paramTypes);
	if(con.isAccessible())con.setAccessible(true);
	return con.newInstance(args);
}

/**
 * static <T>T doCreateInstance(Class<T> cls,Clss<?>[] paramTypes,Object[] args)
 * cls.getDeclaredConstructor(paramTypes);
 * 
 * */
public static void main(String[] args)throws Exception{
	//1.通过反射构建类的实例 
	Point p1=doCreateInstance(
			 Point.class,
			 new Class[] {int.class,int.class},
			 new Object[] {100,200});
			 
	//2.通过反射为p1实例对象的x属性重新赋值为200
	//2.1获取Point类的字节码对象
	Class<?> c = p1.getClass();
	//2.2基于字节码对象获得x属性
	Field fx = c.getDeclaredField("x");
	//2.3修改	P1对象x属性的值
	fx.setAccessible(true);
	fx.set(p1, 200);
	
	System.out.println(p1);
	
}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值