Varım o halde yazıyorum…

Java Enum Reverse Lookup

Mayıs 17th 2012 Java

Java 1.5 sürümü ile birlikte gelen Enum sınıfı genel itibariyle sabit verileri tanımlamak için kullanılır. 1.5 öncesi static final olarak tanımlanan sabit verilere denk gelir bir nevi. Çoğu zaman da bu sabit verilerle ilişkilendirilmiş bir kod eşlemesi yapılır. Döviz-döviz kodu, elemen-element simgesi, durum-durum kodu gibi…Bu kod tanımı Enum sınıfın yapılandırıcısına parametre geçilerek yapılır.

public enum Gender {
	Male("M"),
	Female("F");

	private String code;

	private Gender(String code) {
		this.code = code;
	}

	public String getCode() {
		return code;
	}
}

Herhangi bir enum değerin code alanına

Gender.Male.getCode()

şeklinde erişebiliriz.

Bahsetmek istediğim ise bunun tam tersi durumda yani code alanından enum değere erişmek istediğimiz durumda ne yapılabileceği. Bu durumun tam karşılığı “enum reverse lookup”.

public enum Month {
	JAN(1),FEB(2),MAR(3),APRIL(4),MAY(5),JUN(6),JUL(7),AUG(8),SEP(9),OCT(10),NOV(11),DEC(12);
	private int code;

	private Month(int code) {
		this.code = code;
	}

	public int getCode() {
		return code;
	}

}

şeklinde bir enum sınıfı olduğunu varsayarsak code alanından Month enum değerine

public Month getMonthFromCode(int code){
  for (Month month : Month.values()){
	  if (month.getCode() == code)
		  return month;
  }
  return null;

şeklinde erişilebilir.

Fakat her seferinde bir for döngüsü ile enum değerleri içinde dönmek yerine static bir Map tanımlayıp, bütün enum değeri-kod eşleşmeleri bu Map‘e koyularak, istenen enum değere her seferinde tek hamlede de erişlebilir. Şöyle ki;

public enum Month {

JANARY(1),FEBRUARY(2),MARCH(3),APRIL(4),MAY(5),JUNE(6),JULY(7),AUGUST(8),SEPTEMBER(9),OCTOBER(10),NOVEMBER(11),DECEMBER(12);
	private int code;

	private static Map enumCodeMap;
	static {
		enumCodeMap = new HashMap();
		for(Month month : Month.values()){
			enumCodeMap.put(month.getCode(), month);
		}
	}

	public static Month getMonthFromCode(int code){
		return enumCodeMap.get(code);
	}

	private Month(int code) {
		this.code = code;
	}

	public int getCode() {
		return code;
	}

}

şeklindeki bir enum tanımı sonrası

Month month = Month.getMonthFromCode(6);
//JUNE

denilebilir. Bu şekilde static bir tanım ile JVM, Month enum sınıfını yüklediğinde hazır hale gelmiş olan enumCodeMap değişkeni üzerinden her seferinde teknik olarak da, kod satırı olarak da tek hamle ile istenen enum değere erişilmiş olur.

Düzenleme : Bu durumla tam olarak örtüşen bir örnek, periyodik cetveldeki elementlerin tutulduğu bir enum sınıfı olabilir. Element adı enum değeri, element simgesi kod olacak şekilde oluşturulmuş olan bir Element enum sınıfı düşünülebilir. Altın’ın simgesi olan “Au” ya erişmekten ziyade, simgesi “Au” olan elemente erişmek lazım olduğu durumlarda bu yöntem kullanılabilir

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail



gerekli



gerekli - yayımlanmayacak


Yorum Yap & Fikrini Paylaş

Firefox kullanıcıları için bulunmaz nimet türünden bir eklenti olan budaneki’den bahsetmiştim. Arada Firefox sürümleri ile uyumsuzluk sorunu yaşasa da şu anda böyle bir sorun yok. Firefox’cular budaneki’yi şuradan yükleyebilir.

Chrome için benzer bir eklenti var mıdır, hanidir nerededir derken Cleeki’yi öğrendim. Bir nevi Chrome için budaneki. Tıpkı budaneki gibi seçilen kelimenin üzerinde beliren bir pencere aracılığı […]

Önceki Yazılar

“The whole secret of writing is rewriting” demiş Baba (The Godfather) serisinin uyarlandığı romanın yazarı olan Mario Puzo.

“Yazmanın bütün sırrı, yeniden yazmaktır”.

Bu cümle kerameti söyleyen zata ait olan yücelikten herhangi bir parlaklık kazanan bir cümle değil. Hedef aldığı yazmak eylemine yönelik dar bir çerçeveye de sıkıştırılabilir değil. Ufku ve de kapsama alanı geniş, ifade yeteneği […]

Sonraki Yazılar

Sharing
Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail