SORU
1 Mart 2010, PAZARTESİ


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
1 Mart 2010, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Best Quality Cartoons

    Best Quality

    10 ŞUBAT 2014
  • Munchkin the Teddy Bear

    Munchkin the

    30 EYLÜL 2011
  • William Hyde

    William Hyde

    23 HAZİRAN 2008