Tidak secara langsung seperti yang Anda tulis, yaitu, di mana nilai enum sama dengan angka, tetapi ya secara tidak langsung seperti yang ditunjukkan pada tautan Ben S.
@Benoit Saya tidak berpikir Ini adalah penipuan: yang satu adalah tentang pengaturan hanya nilai pertama dan kenaikan dari sana, ini tentang pengaturan semua nilai. Tapi pasti terkait.
apakah ini masih bekerja dengan gson dan mengkonversi dari json.
Zapnologica
4
Anda juga dapat mendeklarasikan variabel "public final int numVal" dan cukup mengaksesnya secara langsung sebagai EXIT_CODE.A.numVal (Saya lebih suka nama 'nilai'), tanpa perlu metode accessor. Karena sudah final, itu hanya dapat diatur dalam konstruktor. IMO itu mengarah ke kode yang sedikit lebih bersih, tetapi sebagian besar masalah preferensi, saya kira. Menggunakan variabel akhir menghemat satu definisi metode.
Steve Ferguson
34
Ya , dan kemudian beberapa, contoh dari dokumentasi:
publicenumPlanet{
MERCURY (3.303e+23,2.4397e6),
VENUS (4.869e+24,6.0518e6),
EARTH (5.976e+24,6.37814e6),
MARS (6.421e+23,3.3972e6),
JUPITER (1.9e+27,7.1492e7),
SATURN (5.688e+26,6.0268e7),
URANUS (8.686e+25,2.5559e7),
NEPTUNE (1.024e+26,2.4746e7);// in kilogramsprivatefinaldouble mass;// in metersprivatefinaldouble radius;Planet(double mass,double radius){this.mass = mass;this.radius = radius;}privatedouble mass(){return mass;}privatedouble radius(){return radius;}// universal gravitational // constant (m3 kg-1 s-2)publicstaticfinaldouble G =6.67300E-11;double surfaceGravity(){return G * mass /(radius * radius);}double surfaceWeight(double otherMass){return otherMass * surfaceGravity();}publicstaticvoid main(String[] args){if(args.length !=1){System.err.println("Usage: java Planet <earth_weight>");System.exit(-1);}double earthWeight =Double.parseDouble(args[0]);double mass = earthWeight/EARTH.surfaceGravity();for(Planet p :Planet.values())System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));}}
Mengapa public void main (String [] args) publik Anda berada di dalam enum itu sendiri ??
IgorGanapolsky
3
@IgorGanapolsky Untuk membuat contoh mandiri saya kira!
mat_boy
2
@IgorGanapolsky: karena memang seperti itu dalam dokumen resmi (ikuti tautan- Ya )
serv-inc
@ user1587329 Menarik, saya kira itu hanya untuk tujuan pengujian. Saya tidak melihat cara untuk menggunakannya dalam kode rilis produksi ...
IgorGanapolsky
12
Dengan asumsi EXIT_CODE merujuk System . exit(exit_code) maka Anda bisa melakukannya
enumExitCode{
NORMAL_SHUTDOWN (0), EMERGENCY_SHUTDOWN (10), OUT_OF_MEMORY (20), WHATEVER (30);privateint value ;ExitCode(int value ){this. value = value ;}publicvoid exit (){System. exit ( value );}}
Kemudian Anda dapat menempatkan yang berikut ini di tempat-tempat yang sesuai dalam kode Anda
Jika Anda mencari cara untuk mengelompokkan konstanta di kelas, Anda bisa menggunakan kelas dalam statis:
publicclassOuterClass{publicvoid exit(boolean isTrue){if(isTrue){System.exit(ExitCode.A);}else{System.exit(ExitCode.B);}}publicstaticclassExitCode{publicstaticfinalint A =203;publicstaticfinalint B =204;}}
Jawaban:
sumber
EXIT_CODE.A
danEXIT_CODE.B
merupakan satu-satunya contoh yang pernah ada.Ya , dan kemudian beberapa, contoh dari dokumentasi:
sumber
Dengan asumsi EXIT_CODE merujuk
System . exit
(exit_code) maka Anda bisa melakukannyaKemudian Anda dapat menempatkan yang berikut ini di tempat-tempat yang sesuai dalam kode Anda
ExitCode . NORMAL_SHUTDOWN . exit ( ) '
sumber
Memperluas jawaban Bhesh Gurung untuk menetapkan nilai, Anda dapat menambahkan metode eksplisit untuk menetapkan nilai
Dari memanggil aplikasi
// Anda sudah valid enum dari sekarang
[Tidak dapat mengomentari jawabannya, maka mempostingnya secara terpisah]
sumber
Jika Anda mencari cara untuk mengelompokkan konstanta di kelas, Anda bisa menggunakan kelas dalam statis:
sumber