反射的使用-field

package test.com.channelsoft.smartdialer.util;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;


/**
* 使用反射 得到数值
* //通过title 给出的字段,打印po中的数值
* @author lenovo
*
*/
public class YangllTest {

public static void main(String[] args){

ClTemplatePo po = new ClTemplatePo();
po.setCustid("custiddesc");
po.setPhonenumber1("phonenumber1desc");
po.setPhonenumber2("phonenumber2desc");
po.setPhonenumber3("phonenumber3desc");
po.setPhonenumber4("phonenumber4desc");
po.setPhonenumber5("phonenumber5desc");
po.setPhonenumber6("phonenumber6desc");


List<String> title = new ArrayList<String>();
title.add("CUSTID");
title.add("PHONENUMBER1");
title.add("PHONENUMBER2");
title.add("PHONENUMBER3");
title.add("PHONENUMBER4");
title.add("PHONENUMBER5");
title.add("PHONENUMBER6");

//通过title 给出的字段,打印po中的数值

Class<ClTemplatePo> class1 = ClTemplatePo.class;
Field[] methods = class1.getDeclaredFields();
//得到方法
for(String ti:title){
for(Field fi:methods){
if(fi.getName().equalsIgnoreCase(ti)){
try {
//允许获得private属性的数值  如果不加就只能获得public字段的数值
fi.setAccessible(true);
//调用这个对象对应的方法
String temp = (String)fi.get(po);
System.out.println(":"+temp);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

}
}
<think>好的,用户想了解Java反射机制中Field类的使用方法或相关问题。之前用户的问题是关于MyBatis-Plus的增删改查,现在转向了Java反射Field类,需要结合提供的引用内容来解答。首先,我需要回忆用户提供的引用内容。引用[1]是一个具体的示例代码,展示了如何通过反射获取Field并修改字段的值。引用[2]和[3]解释了Field类的作用,包括获取成员变量的类型和动态访问、修改值。引用[4]则是一个更简单的示例,可能涉及访问私有字段。 用户的问题是如何使用Field类,需要给出使用示例。根据引用中的代码,我需要分步骤说明如何获取Field对象、访问和修改字段值,特别是处理私有字段的情况。同时,要确保回答结构清晰,步骤详细,并附上代码示例。 可能需要注意的点包括:如何获取所有字段或指定字段,如何处理不同类型的字段(如String),如何访问私有字段(setAccessible方法),以及修改静态字段和实例字段的区别。此外,要引用正确的来源,比如在代码示例后添加引用标记[^1]、[^2]等。 另外,用户可能对反射的安全性、性能影响或应用场景有后续问题,需要生成相关问题。例如,如何访问私有方法,反射的性能优化,或Field与Method的区别。这些问题可以帮助用户更全面地理解反射机制。最后,确保回答符合格式要求,使用中文,代码块正确,引用标记自然,并生成相关问题列表。</think>### Java反射Field使用详解 #### 一、Field类核心功能 1. **获取字段信息** - 字段名称 - 字段类型 - 访问修饰符 - 注解信息 2. **动态操作字段** - 读取字段值 - 修改字段值(包括私有字段) - 操作静态字段 #### 二、基础使用示例 ```java // 示例类 class User { public String name = "张三"; private Integer age = 25; public static String country = "中国"; } // 获取所有公有字段 Field[] fields = User.class.getFields(); for (Field field : fields) { System.out.println("公有字段: " + field.getName()); } // 获取特定字段 try { Field nameField = User.class.getField("name"); System.out.println("字段类型: " + nameField.getType()); // 输出String.class[^2] } catch (NoSuchFieldException e) { e.printStackTrace(); } ``` #### 三、私有字段操作 ```java User user = new User(); try { // 获取私有字段 Field ageField = User.class.getDeclaredField("age"); // 解除私有访问限制 ageField.setAccessible(true); // 读取值 Integer ageValue = (Integer) ageField.get(user); System.out.println("原始年龄: " + ageValue); // 输出25[^4] // 修改值 ageField.set(user, 30); System.out.println("修改后年龄: " + user.getAge()); // 需要User类提供get方法 } catch (Exception e) { e.printStackTrace(); } ``` #### 四、静态字段操作 ```java try { Field countryField = User.class.getField("country"); // 读取静态字段值(传入null) String country = (String) countryField.get(null); System.out.println("国家: " + country); // 输出"中国"[^1] // 修改静态字段值 countryField.set(null, "中国北京"); System.out.println(User.country); // 输出"中国北京" } catch (Exception e) { e.printStackTrace(); } ``` #### 五、类型安全操作 ```java Field nameField = User.class.getField("name"); if (nameField.getType() == String.class) { // 使用==比较类型[^1] String value = (String) nameField.get(user); System.out.println("安全获取值: " + value); } ``` #### 六、字段注解处理 ```java // 定义注解 @Retention(RetentionPolicy.RUNTIME) @interface Length { int min() default 0; int max() default 255; } class Product { @Length(max = 50) public String sku; } // 读取注解信息 Field skuField = Product.class.getField("sku"); Length lengthAnnotation = skuField.getAnnotation(Length.class); if (lengthAnnotation != null) { System.out.println("SKU最大长度: " + lengthAnnotation.max()); // 输出50 } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值