Penamaan enum di Jawa: Singular atau Plural?

184

Apakah ada rekomendasi "resmi" tentang cara memberi nama Java enum?

enum Protocol { HTTP, HTTPS, FTP }

atau

enum Protocols { HTTP, HTTPS, FTP }

Saya tahu di dunia .Net, rekomendasinya adalah menggunakan singular kecuali enum yang mewakili flag bit. Hanya ingin tahu apakah ada yang serupa di Jawa.

Pertanyaan terkait yang tampaknya spesifik. Net: Singular atau jamak untuk pencacahan?

friederbluemle
sumber
3
Anda dapat menemukan jawabannya di sini . Enum adalah kelas, artinya Anda harus mendeklarasikannya dengan cara yang sama.
bsiamionau

Jawaban:

220

Enum di Jawa (dan mungkin enum pada umumnya) harus tunggal. Pemikirannya adalah bahwa Anda tidak memilih banyak Protokol, tetapi lebih dari satu Protokol dari kemungkinan pilihan dalam daftar nilai.

Perhatikan tidak adanya bentuk jamak: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

Skor Avram
sumber
2
Microsoft tampaknya memiliki pendapat yang kira-kira sama tentang pemrograman .NET: stackoverflow.com/a/1336012/279112
Panzercrisis
Kenapa TimeUnit menggunakan bentuk jamak? misalnya: DAYS, HOURS...
theyuv
4
Nilai-nilainya jamak, enum itu sendiri bukan :-)
Calvin
21

Dengan cara yang sama ketika Anda mendefinisikan nama tabel dalam database atau kelas di Jawa Anda menggunakan singular untuk enum itu juga pilihan terbaik. Lihat saja bagaimana Anda akan menggunakannya.

Mari kita tulis sebuah contoh:

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

class Appointment {
private Day day;

public void setDay(Day day) {
    this.day = day;
}
}

Dalam bentuk tunggal Anda melihat dengan jelas niat atribut hari. "hari" ini adalah hari dalam minggu perjanjian ini akan diadakan. Kalau tidak, tanda tangan dari metode ini akan ditetapkan hari (hari hari) dan pasti banyak orang akan bertanya-tanya apakah penunjukan bisa terjadi dalam lebih dari satu hari.

Jika Anda bekerja di perusahaan yang memiliki shift 48 jam, Anda dapat mencoba mendefinisikan sesuatu seperti:

public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}

Dengan begitu Anda bisa mengatur hari-hari Anda akan bekerja. Tapi tetap saja itu akan terlihat aneh dan ada pilihan yang lebih baik dan menggunakan bentuk tunggal:

public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}

Sekarang Anda benar-benar menunjukkan arti enum. Biasanya dalam domain apa pun Anda akan menemukan bahwa menggunakan singular untuk enum adalah pilihan terbaik karena setiap konstanta dalam enum hanyalah satu elemen.

Anda juga menyebutkan .NET. Sebuah "flags" enum di .NET hanya berarti bahwa ketika Anda mengharapkan enum itu sebagai parameter apa yang benar-benar Anda dapatkan adalah daftar elemen enum itu (disimpan sebagai integer).

// Define an Enum with FlagsAttribute.
[FlagsAttribute] 
enum MultiHue : short
{
    Black = 0,
    Red = 1,
    Green = 2,
    Blue = 4
};

public void setMultiHue(MultiHue hues);

Anda dapat melakukan hal yang sama di Jawa, tetapi enum masih akan tunggal:

public enum Hue {
BLACK, RED, GREEN, BLUE;
private final Integer hue;

Hue() {
    this.hue = 1 << this.ordinal();
}

public Integer toFlag() {
    return this.hue;
}
}

public class MultiHue {
private Integer hues = 0;

public void addHue(Hue hue) {
    this.hues |= hue.toFlag();
}

public boolean hasHue(Hue hue) {
    return (this.hues & hue.toFlag()) != 0;
}
}

Yang lebih mudah dan lebih jelas (walaupun menggunakan lebih banyak memori) untuk melakukan ini dengan Java hanya menggunakan Daftar.

Josep Panadero
sumber
2
Sebenarnya, cara yang lebih baik untuk melakukan ini adalah EnumSet yang merangkum BitSet dan menangani semua itu untuk Anda. :-)
corsiKa