Heim  >  Artikel  >  In Java erfahren Sie, wie Sie einen Objektwert in ein neues Objekt kopieren und die Daten ändern, ohne dass sich dies auf eine andere Referenzvariable auswirkt

In Java erfahren Sie, wie Sie einen Objektwert in ein neues Objekt kopieren und die Daten ändern, ohne dass sich dies auf eine andere Referenzvariable auswirkt

PHPz
PHPznach vorne
2024-02-06 10:42:091082Durchsuche
Frageninhalt

Ich muss den Anfragetext mit maskierten Daten in der Konsole ausdrucken. Daher möchte ich das Anforderungsobjekt, das zum Drucken auf der Konsole maskiert ist, von dem Anforderungsobjekt trennen, das ohne Maskierung für Unternehmen verwendet wird.

Also habe ich das Anforderungsobjekt (Underwriterequest Request) in ein neues Objekt (Underwriterequest Requestmasking) geklont und dann Methoden zum Maskieren der Daten verwendet.

Aber wenn ich die Abschirmungs-ID auf ein neues Objekt setze, verfügt das Referenzobjekt (Underwriter-Anforderungsanforderung) auch über eine Abschirmung.

Ich möchte nicht blockieren (Underwriter-Anfrage-Anfrage), da dieses Objekt in der Geschäftslogik verwendet werden muss.

Warum wirkt es sich auf das Referenzobjekt aus? Wie kann ich Daten maskieren, ohne das Referenzobjekt zu beeinträchtigen?

Vielen Dank.

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();
    }
    
    

    
}

Ich verwende die Methode clone(), um den Objektwert in ein neues Objekt zu kopieren. Denn ich denke, wenn ich die Daten im neuen Objekt ändere, hat das keine Auswirkungen auf das Referenzobjekt. https://www.geeksforgeeks.org/clone-method-in-java-2/


Richtige Antwort


Anscheinend verwenden Sie das SpringBoot-Framework. Sie können sich die Methode BeanUtils.copyProperties(); ansehen. Diese Methode weist dem ersten und dem zweiten Objekt durch Reflexion dieselben Eigenschaften zu. Die von Dir genannten Probleme wird es nicht geben

Das obige ist der detaillierte Inhalt vonIn Java erfahren Sie, wie Sie einen Objektwert in ein neues Objekt kopieren und die Daten ändern, ohne dass sich dies auf eine andere Referenzvariable auswirkt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen