자바 - 딥 카피 (deep copy)
3253 단어 Java
2. 클 로 네 () 방법의 얕 은 복사, 얕 은 복사 가 만 족 스 럽 지 못 한 부분 이 있다.
3. 목적:
뜻 대로 되 지 않 는 일 을 해결 하기 위해 서 는
클론 () 을 수정 하여 얻 은 새로운 대상 이 복 제 된 대상 의 필드 에 영향 을 주지 않 는 문 제 를 해결 하기 위해 서 는
우 리 는 딥 복사 (deep copy) 를 실현 해 야 한다.
4. 예시:
package com.basis.entity;
public class Person implements Cloneable {
private String adress;
private Info info;
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
public Info getInfo() {
return info;
}
public void setInfo(Info info) {
this.info = info;
}
@Override
public String toString() {
return "Person{" +
"adress='" + adress + '\'' +
", info=" + info +
'}';
}
public Object clone() throws CloneNotSupportedException{
Person person = (Person) super.clone();
person.info = (Info) info.clone();
return person;
}
}
package com.basis.entity;
public class Info implements Cloneable {
private String IDCard;
private String name;
public String getIDCard() {
return IDCard;
}
public void setIDCard(String IDCard) {
this.IDCard = IDCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Info{" +
"IDCard='" + IDCard + '\'' +
", name='" + name + '\'' +
'}';
}
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
}
package com.company;
import com.basis.entity.Info;
import com.basis.entity.Person;
public class Main {
public static void main(String[] args) {
Info info = new Info();
info.setName(" ");
info.setIDCard("111111");
Person person1 = new Person();
person1.setAdress(" ");
person1.setInfo(info);
System.out.println("clone() person1:"+person1.toString());
Person person2 = null;
try {
person2 = (Person)person1.clone();
person2.setAdress(" ");
Info info1 = person2.getInfo();
info1.setName(" ");
info1.setIDCard("222222");
person2.setInfo(info1);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println("clone() person1:"+person1.toString());
System.out.println("clone() person2:"+person2.toString());
}
}
5. 결과:
clone() person1:Person{adress=' ', info=Info{IDCard='111111', name=' '}}
clone() person1:Person{adress=' ', info=Info{IDCard='111111', name=' '}}
clone() person2:Person{adress=' ', info=Info{IDCard='222222', name=' '}}
6. 완벽 한 해결
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.