07 Temmuz 2006

6 Saatlik Deneyim

Merhabalar, bugün karşılaştığım, nerdeyse 6 saattir bulmakta uğraştığım bir hatayı sizinle paylaşmak istiyorum. Hatanın nedeni çok basit ama proje büyük olunca bulmak çok zor oluyor. Bildiğiniz üzere Java'da objeleri yeni oluşturmak ile referans olarak başka bir değişkene atamak farklı şeyler.Bu temel bir kuraldır. İşte bu kural dikkate alınmazsa aşağıdaki sorunu yaşarsınız:
Mesela elinizde HashMap sınıfına ait map isminde bir objeniz var.Key olarak bir String,value olarak List objesi tutuyor. Eğer siz, map objesinden bir değeri aşağıdaki şekilde bir List değişkenine atarsanız ve yeni değişkenden bir eleman silerseniz bu map objesinde tutulan List objesinden de silinir:
List list = (List)map.get("a");
// key değeri a olan map'teki List objesinden de aynı elemanı siler.
list.remove(0);


yukardakinin yerine aşağıdakini kullanmak gerekir:
List list = new ArrayList( (List)map.get("a") );
// list yeni bir obje olduğundan map objesi etkilenmez.
list.remove(0);


Bu nedenle işlemlerinizde bir tutarsızlık görebilirsiniz, benim bugün gördüğüm gibi.Bir de bence hatalar genelde ufak ayrıntılardan çıkmakta, kodu yazarken temel olan şeyleri göz önünde daima bulundurmak lazım.Aksi takdirde 6 saat boşu boşuna debeleniyorsunuz:)

Hiç yorum yok: