Java反射获取实体类的名称以及set值


		Class clazz = R1023106103.class;
		Field[] field = clazz.getDeclaredFields();//获取属性数组
		R1023106103 pc = (R1023106103) clazz.newInstance();// 创建一个实例
		for (Field field2 : field) {
			field2.setAccessible(true);//对private 以及 final 标识的字段附访问权限。否则没有办法获取private 中的属性。
			String fieldName = field2.getName();//获取属性名称
			Class cla = field2.getType();//获取属性类型
			String type = cla.getTypeName();
			type = type.substring(type.lastIndexOf(".")+1,type.length());
			//判断只是参考,下面的set与get才是真正的方法
			if(!fieldName.equals("serialVersionUID")&&!fieldName.equals("messageTypeId")){
				System.out.println(fieldName+"~~~~~~~~~"+type+"----"+field2.get(pc));
				if(type.equals("long")||type.equals("Long")){
					field2.set(pc, 1L);
				}else if(type.equals("double")||type.equals("Double")){
					field2.set(pc, 0.26);
				}else if(type.equals("Short")){
					field2.set(pc, 1);
				}else{
					field2.set(pc, "1");
				}
				System.out.println(fieldName+"~~~~~~~~~"+type+"----"+field2.get(pc));
			}
		}
		System.err.println(pc.getFilmThickMaxDif());
	
### 使用Java反射机制动态设置对象属性 通过Java反射机制可以动态访问和修改对象的字段。以下是详细的说明以及代码示例: #### 动态设置字段的过程 可以通过 `Field` 类的方法来操作对象中的字段。具体来说,使用 `set()` 或者特定类型的 setter 方法(如 `setInt()`、`setBoolean()` 等),可以直接为指定的对象实例设置字段的新。 下面是一个完整的例子展示如何利用反射技术更改对象的私有字段[^1]: ```java import java.lang.reflect.Field; public class ReflectionExample { public static void main(String[] args) throws Exception { // 创建目标类的一个实例 ConcreteClass obj = new ConcreteClass(); // 获取该类对应的 Class 对象 Class<?> clazz = Class.forName("ConcreteClass"); // 获取为 'privateString' 的字段 Field privateStringField = clazz.getDeclaredField("privateString"); // 设置可访问权限以便能够操作私有字段 privateStringField.setAccessible(true); // 输出原始 System.out.println("Original Value: " + privateStringField.get(obj)); // 修改字段 privateStringField.set(obj, "New Value via Reflection!"); // 再次打印确认新已被成功写入 System.out.println("Updated Value: " + privateStringField.get(obj)); } } // 定义测试用的目标类 class ConcreteClass { private String privateString = "Initial Private Value"; @Override public String toString() { return this.privateString; } } ``` 上述程序展示了如何通过反射改变一个原本不可见(即具有包级或更低可见度)成员变量的内容。注意这里调用了 `setAccessible(true)` 来绕过 Java 访问控制检查[^2]。 对于公有字段,则无需显式地调整其可访问状态即可直接读取/更新它们的数据[^5]: ```java Field publicIntegerField = clazz.getField("publicInteger"); System.out.println(publicIntegerField.getInt(obj)); // prints initial integer value publicIntegerField.setInt(obj, 99); System.out.println(publicIntegerField.getInt(obj)); // should now print updated number ``` 此外,在实际应用中还可能遇到带注解的情况,这时也可以借助反射提取这些元数据并据此执行某些逻辑处理[^3]. 最后得注意的是虽然反射提供了极大的灵活性但它同时也带来了性能开销因此应当谨慎权衡利弊后再决定是否采用此方法解决问题[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值