자바에서 특정 클래스를 deep copy하려면 Object#clone() 메소드를 이용한다.
protected native Object clone() throws CloneNotSupportedException;
public class GcmMessage {
public Object clone() throws CloneNotSupportedException {
return (GcmMessage) super.clone();
}
}
//코드
GcmMessage gcmMessage = new GcmMessage();
GcmMessage newGcmMessage = (GcmMessage ) gcmMessage.clone();
List, Map과 같은 일부 Collection은 interface이라서 clone() 메소드를 지원하지 않는다.
이럴 때는 ArrayList 또는 HashMap같은 실제 클래스(concrete class)를 사용해야 하지만...
Guava의 Lists또는 Maps(com.google.common.collect.Maps)의 static 생성 메소드를 사용하는 것이 훨씬 편하다.
Maps.newHashMap() 또는 Lists.newArrayList()와 같은 메소드를 사용하는 것이 deep copy에 훨씬 편하다.
Map<String, Object> newMap = Maps.newHashMap(map);
'java core' 카테고리의 다른 글
enum 데이터를 리스트(list)로 얻기 (0) | 2016.12.19 |
---|---|
[java] Map을 출력하기 (0) | 2016.12.13 |
JVM의 safepoint (0) | 2016.09.08 |
JDK의 Flight Recorder 라이선스 (0) | 2016.09.08 |
java의 enum 사용시 주의사항 - java.lang.NullPointerException: Name is null (0) | 2016.08.03 |