当前位置: 首页 > 知识库问答 >
问题:

Java反射:对象不是声明类的实例

岳玉书
2023-03-14

用户类

public class User {
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;
        @Column(unique=true)
        private String username;
        @JsonIgnore
        private String password;
        private String firstName;
        private String lastName;
        private Date dob;
        private String motherName;
        private String fatherName;
        private String mobileNumber;
        @Column(unique=true)
        private String email;
        @ManyToOne
        @JoinColumn(name="role_id", nullable=false)
        private Role role;
        private String status;
    
        public void setPassword(String password) {
            this.password = PasswordEncoder.getEncodedPassword(password);
        }
    }
@Data
public class UserRequest {
    private Long id;
    private String username;
    private String password;
    private String firstName;
    private String lastName;
    private Date dob;
    private String motherName;
    private String fatherName;
    private String mobileNumber;
    private String email;
    private Long role;
    private String status;
}
public static void copy(Object dest, Object source) throws IntrospectionException, IllegalArgumentException, IllegalAccessException,
        InvocationTargetException {
    BeanInfo beanInfo = Introspector.getBeanInfo(source.getClass());
    PropertyDescriptor[] pdList = beanInfo.getPropertyDescriptors();
    for (PropertyDescriptor pd : pdList) {
        Method writeMethod = null;
        Method readMethod = null;
        try {
            writeMethod = pd.getWriteMethod();
            readMethod = pd.getReadMethod();
        } catch (Exception e) {
        }

        if (readMethod == null || writeMethod == null) {
            continue;
        }

        Object val = readMethod.invoke(source);
        writeMethod.invoke(dest, val);
    }
}

我把这个复制方法叫做

 Utility.copy(user,userRequest);

并在执行writeMethod.invoke(dest,val)时获得以下异常。有人能帮忙吗?

对象不是在java.base/jdk.internal.reflect.nativeMethodAccessorImpl.Invoke0(原生方法)在java.base/jdk.internal.reflect.nativeMethodAccessorImpl.Invoke(nativeMethodAccessorImpl.java:64)在

共有1个答案

宿镜
2023-03-14

您只获得源类的BeanInfo,然后从该BeanInfo...所以WriteMethod是源类的setter,但您是在目标类的实例上调用它的。

您可能需要分别获得源类和目标类的BeanInfo,然后对于源中的每个属性,在目标类中找到同名的属性(如果有的话),并使用该属性的write方法来设置值。

 类似资料:
  • 我的应用程序需要对Spring bean执行动态调用。我扫描Spring bean以查找带有自定义注释的方法,并存储对对象的引用,以备将来调用。 上面的代码将根据一个方法没有重载(按需求)的事实,按名称提取它。 但是,当我在后面的代码中尝试调用时,我得到了标题中描述的。 我所有的bean都是AOP代理,因为我使用Spring事务。 我使用以下代码获得变量,因为AOP代理不显示源类中注释 总而言之,

  • 问题内容: 这个问题在Google上到处都有,但我仍然遇到问题。这就是我想要做的。因此,就像标题状态一样,我遇到了“对象不是声明类的实例”错误。有任何想法吗?谢谢! Main.java TestFunction.java 问题答案: 您正在使用该类调用该方法,但需要一个实例。试试这个:

  • 问题内容: 我已经有一段时间没有接触过Mockito了,我也从未广泛使用它。但是今天,在一些新代码中,我想使用最佳实践,因此我使用以下Java版本退出了模仿内核2.0.54-beta: 我需要此接口的实例进行测试: https://bitbucket.org/globalmentor/rincl/src/bf0e8875a1bae16247dd904e0b8bc067c9f8abc9/src/ma

  • 我有一段时间没有接触过Mockito,也从来没有大量使用过它。但是今天在一些新代码中,我希望使用最佳实践,所以我使用以下Java版本推出了mockito-core 2.0.54-beta: 要重现此问题,请克隆https://bitbucket.org/globalmentor/rincl.git并签出commit2f88d7c5e5ac17b6d316ed54c12cb7b447b7d6ac。然

  • 我已经设置了一个Spring Boot项目,并使用castor xml依赖关系将POJO转换为xml。 在为POJO调用封送处理方法时遇到问题。我查阅了stackoverflow的其他相关问题,但没有一个能解决我的场景。 有一个toString方法,它位于Spring组件中。 以下是片段: 这是客户端内部的封送方法(castor之前自动生成的类): 以下是相同的堆栈跟踪: 这里需要注意的是,当我执

  • 我有一个CookingEvent.class,它是Event.class的子类,hibernate继承策略是@ Inheritance(strategy = Inheritance type。已加入)。当我试图发送一个列表对象作为get响应时。我不例外 2016-08-25 11:49:22.351错误11944---[nio-8189-exec-1]o.a.c.c.c.[.[/]。[servle