Saya memiliki fungsi yang mengembalikan tipe int. Namun, saya hanya memiliki nilai enumerasi PAJAK.
Bagaimana saya bisa memasukkan nilai penghitungan pajak ke int?
public enum TAX {
NOTAX(0),SALESTAX(10),IMPORTEDTAX(5);
private int value;
private TAX(int value){
this.value = value;
}
}
TAX var = TAX.NOTAX; // This value will differ
public int getTaxValue()
{
// what do do here?
// return (int)var;
}
Jawaban:
Anda harus membuat enum terbuka
value
, entah bagaimana(Saya telah mengubah nama menjadi sedikit lebih konvensional dan mudah dibaca, btw.)
Ini dengan asumsi Anda menginginkan nilai yang ditetapkan dalam konstruktor. Jika bukan itu yang Anda inginkan, Anda perlu memberi kami informasi lebih lanjut.
sumber
Tax
, dan ingin mendapatkan nilai numerik darinya.myEnumValue = MyEnum.valueOf(myInt);
arg gagal harus bertipe String - atau ada sesuatu yang saya lewatkan?Saya lebih memilih ini:
kemudian:
sumber
.ordinal()
Jika Anda ingin nilai yang Anda tetapkan dalam konstruktor, Anda perlu menambahkan metode dalam definisi enum untuk mengembalikan nilai itu.
Jika Anda ingin nomor unik yang mewakili nilai enum, Anda dapat menggunakan
ordinal()
.sumber
ordinal()
kasus penggunaan yang valid untukordinal()
. Jika Anda perlu menyimpan nilai unik untukenum
, maka simpan sajaenum
. Ada EnumSets, Daftar Enums, EnumMaps, dan hampir semua koleksi Enum lainnya yang mungkin Anda inginkan tersedia.ordinal()
karena OP tidak memperjelas apa yang dia inginkan.ordinal()
internal di dalam enum itu sendiri. Misalnya, saya memiliki enum yang disebut "Season
" yang berisi nilai-nilaiSpring
,Summer
,Autumn
, danWinter
, dan telah metode umum yang disebutnext()
yang mengembalikanvalues()[(ordinal() + 1) % 4]
eksternal, ada kode pernah melihat nomor urut, dan tidak akan pernah ada anggota tambahan di enum ini, jadi sepertinya case-use yang valid.ordinal()
engsel pada kode yang jauh dihancurkan oleh perubahan pada konstanta enum enum. Jika Anda akan memodifikasi konstanta enum, Anda harus sudah berada di file itu. Kebanyakan enum cukup pendek, dan jika tidak, Anda harus memeriksa file dengan lebih teliti. Dalam kedua kasus, Anda mungkin harus memiliki unit test yang mencakupnext()
metode Anda .Kadang-kadang beberapa pendekatan C # membuat hidup lebih mudah di dunia Jawa ..:
sumber
Mungkin lebih baik menggunakan representasi String daripada integer, karena String masih valid jika nilai ditambahkan ke enum. Anda dapat menggunakan metode enum's name () untuk mengonversi nilai enum ke String dan metode enum's valueOf () untuk membuat representasi enum dari String lagi. Contoh berikut menunjukkan cara mengubah nilai enum ke String dan kembali (ValueType adalah enum):
sumber
sumber
Pendekatan yang agak berbeda (setidaknya pada Android) adalah menggunakan anotasi IntDef untuk menggabungkan satu set konstanta int
Gunakan sebagai parameter fungsi:
atau dalam deklarasi variabel:
sumber