首页 > Java > 在Java中,如何将对象值复制到新对象并更改数据而不影响另一个引用变量

在Java中,如何将对象值复制到新对象并更改数据而不影响另一个引用变量

PHPz
发布: 2024-02-06 10:42:09
转载
1133 人浏览过
问题内容

我需要在控制台中打印带有屏蔽数据的请求正文。因此,我希望将用于打印到控制台的屏蔽的请求对象与用于业务而不屏蔽的请求对象分开。

因此,我将请求对象(underwriterequest request)克隆到新对象(underwriterequest requestmasking),然后使用方法来屏蔽数据。

但是当我将屏蔽身份证设置为 new object 时,引用对象(underwriterequest 请求)也具有屏蔽。

我不想屏蔽(underwriterequest 请求),因为该对象必须在业务逻辑中使用。

为什么会对参考对象产生影响? 如何屏蔽数据而不影响参考对象?

谢谢。

public @ResponseBody ResponseEntity<UnderwriteResponse> execute(@RequestBody UnderwriteRequest request) {

        UnderwriteRequest requestMasking = maskingData(request);
}






public static UnderwriteRequest maskingData(UnderwriteRequest request) throws CloneNotSupportedException {
    UnderwriteRequest requestMasking = (UnderwriteRequest) request.clone();

    try {
            
            if(request != null) {

                if(request.getRequestBody().getPersonalData().getIdCard() != null && !request.getRequestBody().getPersonalData().getIdCard().isEmpty()) {
            
                        maskIdCard(requestMasking, request);
                
        }
        }catch (Exception e) {
             log.info(e);
    }

    return requestMasking;
}





public static void maskIdCard(UnderwriteRequest requestMasking, UnderwriteRequest request) {
            String maskChar = "X";
            String maskString = StringUtils.repeat( maskChar, 9);
            String idcard = request.getRequestBody().getPersonalData().getIdCard();
                    requestMasking.getRequestBody().getPersonalData().setIdCard(StringUtils.overlay(idcard, maskString, 0, 9));

}



@Getter
@Setter
public class UnderwriteRequest implements Cloneable{


    private RequestHeader requestHeader;
    private RequestBrmsBody requestBrmsBody;
    private RequestBody requestBody;

    private RESPONSE_STATUS status = RESPONSE_STATUS.FAILED;
    private String message;
    
    @Override
    public Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }
    
    

    
}
登录后复制

我使用clone()方法将对象值复制到新对象。 因为我认为当我更改新对象中的数据时,不会影响引用对象。https://www.geeksforgeeks.org/clone-method-in-java-2/


正确答案


看来您正在使用SpringBoot框架。你可以看一下 BeanUtils.copyProperties();方法。该方法通过反射为第一个对象和第二个对象分配相同的属性。不会有你提到的问题

以上是在Java中,如何将对象值复制到新对象并更改数据而不影响另一个引用变量的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板