SORU
20 Temmuz 2012, Cuma


Sonar İhlali: Güvenlik - Dizi doğrudan saklanır

Sonar İhlalidir

Sonar İhlali: Güvenlik - Dizi doğrudan saklanır

public void setMyArray(String[] myArray) { 
  this.myArray = myArray; 
} 

Çözüm:

public void setMyArray(String[] newMyArray) { 
  if(newMyArray == null) { 
    this.myArray = new String[0]; 
  } else { 
   this.myArray = Arrays.copyOf(newMyArray, newMyArray.length); 
  } 
}

Ama acaba neden ?

CEVAP
20 Temmuz 2012, Cuma


Saklamak istediğiniz dizi arayan tarafından tutulan aynı dizi olduğunu şikayetçi. Eğer arayan kişi daha sonra bu dizi değiştirirse, dizi nesnesinde saklanan (ve dolayısıyla nesnenin kendisi) değişecek.

Çözüm elden ele dolaşsın olduğunda nesne içinde bir kopyasını yapmaktır. Bu denirsavunma kopyalanıyor. Koleksiyonu sonraki bir değişiklik dizi nesnenin içinde saklı etkilemez.

Ayrıca normalde bir koleksiyon (getMyArray() ilgili bir çağrı gibi) dönerken bunu yapmak için iyi bir uygulamadır. Aksi takdirde alıcı bir değişiklik yapmak ve saklı örneği etkileyebilir.

Bu tabii ki tüm değişken koleksiyon (ve aslında tüm değişken nesneler) - sadece diziler için geçerlidir. Bu diğer kaygıların yanı sıra değerlendirilmesi gereken performansı bir etkiye sahip olduğunu da unutmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • KRQE

    KRQE

    6 AĞUSTOS 2007
  • TecnoTutosPC

    TecnoTutosPC

    19 Kasım 2012