在 Java 中,Field(字段/成员变量)赋值有多种方式,取决于你是普通代码里赋值,还是通过反射(Reflection)赋值。下面分情况说明。
public class User {
private String name = "Tom";
}
public class User {
private String name;
public User(String name) {
this.name = name;
}
}
public class User {
private String name;
public void setName(String name) {
this.name = name;
}
}
使用:
User user = new User();
user.setName("Jack");
当你不知道字段名或在运行时动态赋值时,使用 java.lang.reflect.Field。
public class User {
private String name;
private int age;
}
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) throws Exception {
User user = new User();
// 获取 Class 对象
Class<?> clazz = user.getClass();
// 获取字段
Field nameField = clazz.getDeclaredField("name");
Field ageField = clazz.getDeclaredField("age");
// 设置可访问(private 字段必须)
nameField.setAccessible(true);
ageField.setAccessible(true);
// 赋值
nameField.set(user, "Tom");
ageField.set(user, 18);
System.out.println(user);
}
}
getField():只能获取 public 字段getDeclaredField():可获取所有字段(含 private)setAccessible(true)static 字段赋值:field.set(null, value);
public class Config {
public static String ENV = "dev";
}
Field field = Config.class.getDeclaredField("ENV");
field.set(null, "prod");
❌ IllegalAccessException
✅ 忘记 setAccessible(true)
❌ NoSuchFieldException
✅ 字段名写错或字段不存在
如果你是指:
可以告诉我具体场景,我可以给你更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。