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

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • HBO

    HBO

    17 Mayıs 2006
  • listedabive

    listedabive

    30 Ocak 2007