Bu Sayfayı Paylaş:

Kavram

Object Sınıfı (Class'ı)

Tanım: Java'da tüm class'ların varsayılan olarak extend ettiği, tüm class'ların ortak özelliklerini içeren , class hiyerarşisinde kök class

Kavram

equals Method'u

Tanım: Java'da Object class'ında bulunan ve iki nesnenin aynı nesne olup olmadığı veya eşit olup olmadığı bilgisini döndüren method. Bir nesneye parametre olarak diğer nesne , a.equals(b) şeklinde verilir ve method'tan b nesnesinin a nesnesine eşit (aynı) olup olmadığı bilgisi talep edilir. Eğer override edilmez isi iki nesne aynı nesne ise true döner aksi takdirde false döner

Kavram

hashCode Method'u

Tanım: Java'da Object class'ında bulunan ve aynı nesne için hep aynı int değerini döndüren method. Bu method'dan dönen int değeri Hashtable, Hashset gibi collection'larda aynı nesnenin collection'da olup olmadığını anlamak için kullanılır. Yani hashCode değerleri aynı olan iki farklı nesne aynı nesne gibi işlem görmektedir

Örnek

Apache Commons Lang Kütüphanesinde ToStringBuilder Kullanım Örneği

Aşağıdaki class'ta Apache Commons Lang kütüphanesindeki ToStringBuilder class'ının kullanım örneği görülmektedir :
import org.apache.commons.lang3.builder.*;
public class Test {
	
	private String name;
	private int size;
	
	public Test(String name,int size) {
		setName(name);
		setSize(size);		
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
	public int getSize() {
		return size;
	}
	public void setSize(int size) {
		this.size = size;
	}	
	
	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
	
	public static void main(String[] args) {
		Test t=new Test("Ad1", 123);
		System.out.println(t);
	}
}
Yukarıdaki Test class'ının toString'i override edilmiş ve ToStringBuilder kullanılmıştır. Aynı class'ın için bir main koyarak test yapılmıştır. Uygulama çalıştırıldığında aşağıdaki gibi bir çıktı verecektir :
Test@390ede48[name=Ad1,size=123]

ToStringBuilder class'ın property'lerini bulmakta ve property adı=değer şeklinde output string'i üretmektedir.

Örnek

Apache Commons Lang Kütüphanesinde HashCodeBuilder Kullanım Örneği

Aşağıdaki class'ta Apache Commons Lang kütüphanesindeki HashCodeBuilder class'ının kullanım örneği görülmektedir :
import org.apache.commons.lang3.builder.*;
public class Test {
	
	private String name;
	private int size;
	
	public Test(String name,int size) {
		setName(name);
		setSize(size);		
		
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
	public int getSize() {
		return size;
	}
	public void setSize(int size) {
		this.size = size;
	}
		
	@Override
	public int hashCode() {
		return HashCodeBuilder.reflectionHashCode(this);
	}	
	
	public static void main(String[] args) {
		Test t=new Test("ali", 112);
		Test t2=new Test("veli", 112);
		System.out.println("t hash code:"+t.hashCode());
		System.out.println("t2 hash code:"+t2.hashCode());
		
	}
}
Class'ta hem hashCode override edilmiş ve apache HashCodeBuilder class'ı kullanılmıştır. Ekrana üretilen hashcode'lar bastırılmıştır. Uygulama çalıştırıldığında aşağıdak gibi bir çıktı vermektedir :
t hash code:3600175
t2 hash code:133809909

Öneri

Bir Class'ta equals ve hashCode Birlikte Override Edilmelidir

Bir class'ta equals veya hashCode method'larından birini override etmeniz gerekiyor ise bu methodların ikisini birden override (üzerine yazma) ediniz. Eşit olan iki nesnenin (equals true döndürüyor ise) hashCode değerleri de aynı değer döndürecek şekilde yapılmalıdır

İpucu

Id Değeri Eşit Olan Nesnelerin Her Zaman Aynı Nesne Olarak Kabul Edilmesi İçin equals ve hashCode Methodları Override Edilebilirsiniz

Eğer bir class'ta id değeri var ise , aynı id'ye sahip iki farklı nesneyi aynı nesne olarak yorumlamak isteyebilirsiniz. Bunun en kolay yolu equals ve hashCode override edip, sadece id değerine göre , bir karşılaştırma yapabilir ve değer üretilmesini sağlayabilirsiniz. Bu şekilde iki farklı nesnenin id'leri eşit olduğu zaman eşit kabul edilirler



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir