Maison  >  Article  >  En Java, comment copier une valeur d'objet vers un nouvel objet et modifier les données sans affecter une autre variable de référence

En Java, comment copier une valeur d'objet vers un nouvel objet et modifier les données sans affecter une autre variable de référence

PHPz
PHPzavant
2024-02-06 10:42:091025parcourir
Contenu de la question

Je dois imprimer le corps de la demande avec des données masquées dans la console. Je souhaite donc séparer l'objet de requête masqué pour l'impression sur la console de l'objet de requête utilisé à des fins professionnelles sans masquage.

J'ai donc cloné l'objet de requête (demande de souscription) vers un nouvel objet (masquage de demande de souscription), puis j'ai utilisé des méthodes pour masquer les données.

Mais lorsque je définis l'identifiant de protection sur un nouvel objet, l'objet de référence (demande de souscription) a également une protection.

Je ne souhaite pas bloquer (demande de souscription) car cet objet doit être utilisé dans la logique métier.

Pourquoi cela affecte-t-il l'objet de référence ? Comment puis-je masquer des données sans affecter l'objet de référence ?

Merci.

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

    
}

J'utilise la méthode clone() pour copier la valeur de l'objet dans un nouvel objet. Parce que je pense que lorsque je modifie les données du nouvel objet, cela n'affectera pas l'objet de référence. https://www.geeksforgeeks.org/clone-method-in-java-2/


Bonne réponse


Il semble que vous utilisez le framework SpringBoot. Vous pouvez jeter un œil à la méthode BeanUtils.copyProperties(); Cette méthode attribue les mêmes propriétés aux premier et deuxième objets via la réflexion. Il n'y aura pas les problèmes que vous avez mentionnés

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer