Yalnızca sınırlı sayıda değer alabilen değişkenler / parametrelerle çalışırken, her zaman Java'yı kullanmaya çalışıyorum enum
.
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
Kodumun içinde kaldığım sürece, bu iyi çalışıyor. Bununla birlikte, genellikle aynı amaç için düz int
(veya String
) değerler kullanan diğer kodlarla arayüz oluşturmam gerekir veya verilerin sayı veya dize olarak depolandığı bir veritabanından / veritabanından okumam / yazmam gerekir.
Bu durumda, her bir enum değerini bir tamsayı ile ilişkilendirmek için uygun bir yola sahip olmak istiyorum, böylece her iki yolu da dönüştürebilirim (başka bir deyişle, "tersine çevrilebilir bir numaralandırmaya" ihtiyacım var).
Enum'dan int'e gitmek kolaydır:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Sonra int değerine olarak erişebilirim BonusType x = MONTHLY; int id = x.id;
.
Bununla birlikte, tersi için iyi bir yol göremiyorum, yani int'den enum'a gitmek. İdeal olarak, şöyle bir şey
BonusType bt = BonusType.getById(2);
Bulabildiğim tek çözüm:
- Numaralandırmaya bir
BonusType.values()
"int -> enum" haritasını doldurmak için kullanan , ardından bunu önbelleğe alan ve aramalarda kullanan bir arama yöntemi ekleyin. İşe yarardı, ancak bu yöntemi kullandığım her numaraya aynı şekilde kopyalamam gerekir :-(. - Arama yöntemini statik bir yardımcı program sınıfına yerleştirin. O zaman sadece bir "arama" yöntemine ihtiyacım olur, ancak bunun keyfi bir enum için çalışmasını sağlamak için yansımayla uğraşmam gerekir.
Her iki yöntem de böylesine basit (?) Bir problem için son derece garip görünüyor.
Başka fikir / anlayış var mı?
ordinal()
.ordinal()
kararlaştırılabilir mi (yani, sadece kullanamazsınız ) veya dış güçler tarafından mı kararlaştırılır?