我在我的项目中使用 java spring。我尝试访问该属性并使用反射将其设置为特定值。
我尝试访问 User 类的 name 属性:
@Data
public class User {
@Id
private String id;
private String name;
private String phone;
private String email;
}
在这里,我如何尝试访问名称字段:
User newUser = userRepository.get(id);
User user = accessProp(newUser, User.class, "name", "John");
public <D> D accessProp(Class<D> dest, String fieldName, Object value ){
Field filed = null;
var cls = AdminUser.class;
filed = cls.getField(fieldName);
filed.set(dest, value);
return dest;
}
但在这一行:
filed = cls.getField(fieldName);
我收到此错误:
java.lang.NoSuchFieldException: name
我的问题是为什么找不到“名称”字段?
我的问题是为什么找不到“名称”字段?
该getField
方法不返回私有字段。您需要使用getDeclaredField
来获取私有字段。但getDeclaredField
只返回目标类的字段。
因此,要查找和更新私有字段(在给定类中),您需要执行以下操作:
Field field = User.class.getDeclaredField("name");
field.setAccessible(true);
field.set(userObject, value);
(请注意,您还需要使用setAccessible
来允许访问私有字段。)
如果要在给定类的某个超类中设置命名私有字段,则需要使用getSuperclass()
遍历超类链,直到找到Class
具有您要查找的字段的 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句