SORU
16 ŞUBAT 2011, ÇARŞAMBA


Uygun numaralama ve int / arasında göster Dize

Değerler sadece sınırlı sayıda alabileceği parametreler/Değişkenler ile çalışırken, Java gibi enum, her zaman kullanmaya çalışın

public enum BonusType {
  MONTHLY, YEARLY, ONE_OFF
}

Benim kod içinde kaldığım sürece, bu gayet iyi çalışıyor. Ancak, sık sık gerek arayüzü ile diğer kullandığı kod Ovası int (String) değerleri için aynı amaç veya ihtiyacım için okuma/yazma için bir veritabanı veriler nerede saklı olarak bir sayı veya dize.

Bu durumda, istediğim şey ... ... uygun bir şekilde ilişkilendirmek, her numaralandırma değeri bir tamsayı, öyle ki ben dönüştürmek her iki yolla da (diğer bir deyişle, bir "tersinir numaralama").

Numaralama için int gidiyor kolaydır:

public enum BonusType {
  public final int id;

  BonusType(int id) {
    this.id = id;
  }
  MONTHLY(1), YEARLY(2), ONE_OFF(3);
}

O zaman BonusType x = MONTHLY; int id = x.id; int değer erişebilirsiniz.

Ancak, tersi için iyi bir yol görüyorum, yani numaralama. int gidiyor İdeal olarak, bir şey gibi

BonusType bt = BonusType.getById(2); 

Bulabildiğim tek çözüm vardır:

  • BonusType.values() bir harita doldurmak için kullandığı numaralama, içine bir arama yöntemi " - ^ int . "o zaman önbelleğe ve aramaları için kullanır. numaralama Aynı şekilde, her numaralandırma içine kullanıyorum ama bu yöntem kopyala lazım olur :-(.
  • Statik bir Yardımcı Sınıf içine arama yöntemi koymak. O zaman sadece "arama" yöntemi, ama yansıması keyfi bir numaralama için keman gerek. bir ihtiyacım olurdu

Her iki yöntem de böyle bir basit için çok garip görünüyor (?) sorun.

Başka fikri/düşüncesi olan?

CEVAP
16 ŞUBAT 2011, ÇARŞAMBA


seçeneğine int numaralama

yourEnum.ordinal()

seçeneğine numaralama int

EnumType.values()[someInt]

Dize öğelerini numaralandırma

EnumType.valueOf(yourString)

numaralandırma seçeneğine Dize

yourEnum.name()

Bir yan not:ordinal() "" sürüm. Sürüm arasında kararsız olabilir gibi Bu hep benim veritabanlarında dizeleri gibi sabitleri depolamak nedeni de tam olarak budur. MySql kullanırken (aslında,,*! *20) olarak saklıyorum

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AmazonWireless

    AmazonWirele

    8 EYLÜL 2010
  • Kenneth Håkonsen

    Kenneth Håk

    13 Mart 2011
  • Motor Trend Channel

    Motor Trend

    11 Mart 2006