Saat bekerja dengan variabel / parameter yang hanya dapat mengambil sejumlah nilai, saya mencoba untuk selalu menggunakan Java enum, seperti pada
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
Selama saya tetap berada di dalam kode saya, itu berfungsi dengan baik. Namun, saya sering perlu berinteraksi dengan kode lain yang menggunakan nilai biasa int(atau String) untuk tujuan yang sama, atau saya perlu membaca / menulis dari / ke database tempat data disimpan sebagai angka atau string.
Dalam hal ini, saya ingin memiliki cara yang mudah untuk mengaitkan setiap nilai enum dengan bilangan bulat, sehingga saya dapat mengonversi kedua cara (dengan kata lain, saya memerlukan "enum yang dapat dibalik").
Beralih dari enum ke int itu mudah:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Kemudian saya dapat mengakses nilai int sebagai BonusType x = MONTHLY; int id = x.id;.
Namun, saya tidak melihat cara yang baik untuk kebalikannya, yaitu berpindah dari int ke enum. Idealnya, seperti
BonusType bt = BonusType.getById(2);
Satu-satunya solusi yang dapat saya temukan adalah:
- Letakkan metode pencarian ke dalam enum, yang digunakan
BonusType.values()untuk mengisi peta "int -> enum", lalu menyimpannya dan menggunakannya untuk pencarian. Akan berfungsi, tetapi saya harus menyalin metode ini secara identik ke setiap enum yang saya gunakan :-(. - Letakkan metode pencarian ke dalam kelas utilitas statis. Maka saya hanya perlu satu metode "pencarian", tetapi saya harus mengutak-atik refleksi untuk membuatnya bekerja untuk enum sewenang-wenang.
Kedua metode tampaknya sangat canggung untuk masalah sederhana (?) Seperti itu.
Ada ide / wawasan lain?
ordinal()
.ordinal()), atau apakah mereka ditentukan oleh kekuatan luar?