Sığ Java bir Haritanın kopyası
Anladığım kadarıyla, yollar (başkaları da olabilir) Java Map
sığ bir kopyasını oluşturmak için bir çift vardır:
Map<String, Object> data = new HashMap<String, Object>();
Map<String, Object> shallowCopy;
// first way
shallowCopy = new HashMap<String, Object>(data);
// second way
shallowCopy = (Map<String, Object>) ((HashMap<String, Object>) data).clone();
Eğer öyleyse, neden bir diğer tercih edilir, ve?
Bir şeyi belirtmekte yarar ikinci yol "İşaretli Dökme" uyarısı. bir verir. @SuppressWarnings("unchecked")
(aşağıya bakınız) biraz rahatsız edici olan, etrafında almak, eklemek zorunda.
@SuppressWarnings("unchecked")
public Map<String, Object> getDataAsMap() {
// return a shallow copy of the data map
return (Map<String, Object>) ((HashMap<String, Object>) data).clone();
}
CEVAP
Her zaman daha iyi bir kopya kurucu kullanarak kopyalamak için. Java clone()
(bkz: How to properly override clone method?) bozuldu.
Josh Bloch on Design - Copy Constructor versus Cloning
Eğer satır aralarını özellikle eğer okursanız benim kitabımda klonlama, ilgili maddenin okuduysanız,
clone
derin bir kırık olduğunu düşünüyorum. [ ... ]Cloneable
bozuldu ama olur böyle bir şey.
Bloch bu arada, ve çerçeve Koleksiyonu tasarlayan, (kim) bile o sadece clone()
yöntem sağlar söyleyerek gitti başka insanlar bekler, çünkü"". Aslında bunu kullanarak tavsiye etmez.
Daha ilginç tartışmalar kopya bir kopya yapıcı bir fabrika daha iyi olup olmadığını düşünüyorum, ama bu tamamen farklı bir tartışma.
Java 7'de kapanması...
JFrame için Java KeyListener tepkisiz ...
String karakteri almak Endeksi - Java...
Android java.lang.NoClassDefFoundError...
belirli bir dizin altındaki tüm java d...