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

  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009
  • thenewboston

    thenewboston

    4 ŞUBAT 2008
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013