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

  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • michal lelkowski

    michal lelko

    9 Temmuz 2006
  • VideoGamePervert

    VideoGamePer

    30 AĞUSTOS 2008