在 Java 中,Field(字段/成员变量) 通常通过 反射(Reflection) 来获取。下面从基础到常见用法系统说明。
要先拿到 Class 对象,常见方式:
Class<?> clazz = User.class;
Class<?> clazz2 = user.getClass();
Class<?> clazz3 = Class.forName("com.example.User");
Field[] fields = clazz.getFields();
Field[] fields = clazz.getDeclaredFields();
Field field = clazz.getField("name");
Field field = clazz.getDeclaredField("age");
public class User {
public String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
User user = new User("Tom", 18);
Field nameField = User.class.getField("name");
String name = (String) nameField.get(user);
Field ageField = User.class.getDeclaredField("age");
ageField.setAccessible(true); // 私有字段必须设置
int age = ageField.getInt(user);
nameField.set(user, "Jack");
ageField.setAccessible(true);
ageField.set(user, 20);
| 方法 | 说明 |
|---|---|
getName() |
字段名 |
getType() |
字段类型 |
getModifiers() |
修饰符 |
setAccessible(true) |
突破 private |
get(obj) / set(obj, value) |
读写值 |
getAnnotation(Annotation.class) |
获取注解 |
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Column.class)) {
Column column = field.getAnnotation(Column.class);
System.out.println(field.getName() + " -> " + column.value());
}
}
setAccessible(true)如果你有具体需求(如:遍历所有字段、赋值、拷贝对象、ORM 映射、Spring 场景),可以告诉我,我可以给更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。