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

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

PHPz
PHPz轉載
2024-02-06 10:42:091026瀏覽
問題內容

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

因此,我將請求物件(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刪除