ฉันสงสัยว่ามีวิธีแนะนำในการทำโคลนนิ่ง / สำเนาอินสแตนซ์ใน java หรือไม่
ฉันมี 3 โซลูชั่นในใจ แต่ฉันสามารถพลาดบางอย่างและฉันต้องการที่จะมีความคิดเห็นของคุณ
แก้ไข: รวมถึงข้อเสนอ Bohzo และปรับแต่งคำถาม: มันเป็นเรื่องของการโคลนนิ่งลึกกว่าการโคลนนิ่งตื้น
ทำด้วยตัวคุณเอง:
รหัสโคลนด้วยมือคุณสมบัติหลังจากคุณสมบัติและตรวจสอบว่าอินสแตนซ์ที่ไม่แน่นอนจะถูกโคลนเกินไป
โปร:
- การควบคุมสิ่งที่จะดำเนินการ
-
ข้อเสียในการดำเนินการอย่างรวดเร็ว:
- น่าเบื่อในการเขียนและบำรุงรักษา
- ข้อผิดพลาดได้ง่าย (ความล้มเหลวในการคัดลอก / วาง, ทรัพย์สินที่หายไป, คุณสมบัติที่ไม่แน่นอนที่กำหนดใหม่)
ใช้การสะท้อน:
ด้วยเครื่องมือการสะท้อนของคุณเองหรือผู้ช่วยภายนอก (เช่น jakarta common-beans) มันง่ายที่จะเขียนวิธีการคัดลอกทั่วไปที่จะทำงานในบรรทัดเดียว
โปร:
- ง่ายต่อการเขียน
- ไม่มีการบำรุงรักษา
ข้อเสีย:
- การควบคุมที่น้อยลงของสิ่งที่เกิดขึ้น
- ข้อผิดพลาดได้ง่ายกับวัตถุที่ไม่แน่นอนถ้าเครื่องมือการสะท้อนไม่ได้โคลนวัตถุย่อยเกินไป
- การดำเนินการช้าลง
ใช้เฟรมเวิร์กโคลน:
ใช้กรอบงานที่ทำเพื่อคุณเช่น:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro:
- เหมือนกับการสะท้อน
- ควบคุมสิ่งที่จะถูกโคลนได้อย่างแม่นยำยิ่งขึ้น
ข้อเสีย:
- อินสแตนซ์ที่ไม่แน่นอนทั้งหมดถูกโคลนอย่างสมบูรณ์แม้ในตอนท้ายของลำดับชั้น
- อาจช้าในการดำเนิน
ใช้เครื่องมือ bytecode เพื่อเขียนโคลนที่รันไทม์
javassit , BCELหรือcglibอาจถูกใช้เพื่อสร้าง cloner โดยเฉพาะเร็วที่สุดเท่าที่เขียนด้วยมือเดียว มีคนรู้จัก lib โดยใช้หนึ่งในเครื่องมือเหล่านี้เพื่อการนี้
สิ่งที่ฉันพลาดที่นี่?
คุณจะแนะนำแบบไหน
ขอบคุณ