Java: derin klonlama/kopyalama için önerilen çözüm örneği
Eğer java örneği derin klon/kopyalama yapmak için önerilen bir yolu varsa merak ediyorum.
Aklımda 3 çözüm var, ama bazı Bayan var ve görüşlerinizi almak istiyorum
edit: Bohzo propositon vardır ve soru filtrele: sığ klonlama. daha derin klonlama.
Kendin yap:
özellikleri sonra elini özelliklerine göre klon kod ve değişken örneklerini de klonlanmış olup olmadığını kontrol edin.
pro:
- ne yapılır . kontrol ^br>
- hızlı yürütme
eksileri:
- yazmak sıkıcı ve korumak
eğilimli (kopyala/yapıştır hatası, özelliği eksik, kesilebilir özellik yeniden) hata
Yansıma kullanın:
Harici bir yardımcı ortak-fasulye jakarta gibi () ile kendi yansıması araçları ile ya da kolay bir satırda iş yapacak genel bir kopyalama yöntemi yazmak için.
pro:
- yazmak kolay
- hayır bakım
eksileri:
- daha az denetim ne olur
değişken ile hata eğilimli ise yansıma aracı alt nesneleri de klon mu yoksa nesne
- yavaş yürütme
Klon çerçeve kullanın:
Sizin için bunu yapmak bir çerçeve kullanın, gibi :
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro:
- yansıma gibi
- tam olarak kopyalanmış olacak ne üzerinde daha fazla kontrol.
eksileri:
- her değişken örneği tamamen, hatta hiyerarşi sonunda kopyalandı
- çok yavaş çalıştırmak için olabilir
Bayt kodu gereçleri zamanında klon yazmak için kullanın
javassit, BCEL cglib özel bir cloner kadar hızlı bir el writed oluşturmak için kullanmak olabilir. Birisi bir lib bu amaçla bu araçlardan birini kullanmayı biliyor mu ?
Ben burada ne kaçırdım ?
Hangisini tavsiye edersiniz ?
Teşekkürler.
CEVAP
derin (klonlar tüm nesne hiyerarşisi) klonlama:
Tüm sınıflar senin kontrolünde ve
Serializable
uygulama zorlayabilirsiniz commons-lang SerializationUtils - serileştirme kullanarakJava Deep Cloning Library - yansıtma - durumlarda sınıfları veya nesneleri istediğiniz clone out of control (bir 3. parti kitaplığı) ve zorlayamazsın onları uygulamak
Serializable
veya durumlarda istemiyor uygulamakSerializable
sığ klonlama (klonlar sadece ilk seviye özellikleri):
Çoğu durumda commons-beanutils BeanUtils -
Spring BeanUtils - eğer zaten bahar ve dolayısıyla kullanıyorsanız sınıf, bu yardımcı program var.
Ben kasten ihmal "kendin yap" seçeneği - API yukarıda sağlamak iyi bir denetim ne için ve ne değildir için clone (örneğin kullanarak transient
String[] ignoreProperties
), böylece yeniden icat tekerlek değil tercih.
Java HTML kaçmak için önerilen yöntem...
TÜM Java bayt imzalanmış olması geçici...
Neden char[] şifreler için Dize Java t...
Java kullanarak.net.Ateş ve işlemek iç...
Derin klonlama nesneleri...