为什么我无法使用反射访问字段类?

迈克尔

我在我的项目中使用 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
 

我的问题是为什么找不到“名称”字段?

斯蒂芬·C

我的问题是为什么找不到“名称”字段?

getField方法不返回私有字段。您需要使用getDeclaredField来获取私有字段。getDeclaredField只返回目标类的字段。

因此,要查找和更新私有字段(在给定类中),您需要执行以下操作:

Field field = User.class.getDeclaredField("name");
field.setAccessible(true);
field.set(userObject, value);

(请注意,您还需要使用setAccessible来允许访问私有字段。)

如果要在给定类的某个超类中设置命名私有字段,则需要使用getSuperclass()遍历超类链,直到找到Class具有您要查找的字段的 。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么类的方法无法访问类的某些字段?

访问类的字段而不使用反射?

无法使用反射访问@ConfigurationProperties类的变量?

为什么我无法使用Jooq的into方法获取类中的数据库字段值?

为什么允许通过反射访问Java私有字段?

当MethodHandle更快时,为什么要使用反射来访问类成员?

为什么在通过指定类名创建的类中无法访问静态字段

为什么反射不想加载我的测试类?

为什么我无法在我的 AndroidViewModel 类中访问我的应用程序?

为什么无法使用IP地址访问我的博客?

为什么我无法使用WebClient访问Yobit API

为什么我无法使用 JavaScript 访问 CSS 属性?

List <dynamic>元素具有字段,但是我无法访问它们。为什么?

为什么我无法在 Java 中访问 Point2D 的数据字段?

为什么我的fstream访问无法编译?

为什么我无法访问 RunCommandLineApplicationAsync?

为什么我的代码无法访问?

为什么我无法访问IPackageFragmentRoot?

为什么可以通过这种方式访问私有变量时无法访问基类的私有字段

为什么我必须在抽象类中将字段声明为“公共”才能从派生类访问它?

为什么在使用 IEnumerator 类列表时无法在扩展方法中访问类方法

C#当我使用反射来注册类时,为什么不能从IOC获取正确的实例

为什么我无法在Python中通过以下方法之一访问类变量?

为什么我无法访问泛型类型类元素?

为什么我无法在此 kotlin 代码中访问抽象类的某些成员?

无法创建我的类的对象 - 为什么?

为什么我在使用的类,方法和字段上得到未使用的声明?

为什么我们在访问器中使用私有字段?

我无法使用C ++访问类的属性