首頁 > Java > 主體

在Java中,如何將物件值複製到新物件並更改資料而不影響另一個引用變量

PHPz
發布: 2024-02-06 10:42:09
轉載
1097 人瀏覽過
問題內容

我需要在控制台中列印帶有屏蔽資料的請求正文。因此,我希望將用於列印到控制台的屏蔽的請求物件與用於業務而不屏蔽的請求物件分開。

因此,我將請求物件(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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板