Java列挙型に名前を付ける方法の「公式」推奨はありますか?
enum Protocol { HTTP, HTTPS, FTP }
または
enum Protocols { HTTP, HTTPS, FTP }
.Netの世界では、ビットフラグを表す列挙型を除き、単数形を使用することをお勧めします。Javaに似たようなものがあるかどうか知りたいだけです。
.Net固有のように思われる関連質問:列挙の単数形または複数形?
Java列挙型に名前を付ける方法の「公式」推奨はありますか?
enum Protocol { HTTP, HTTPS, FTP }
または
enum Protocols { HTTP, HTTPS, FTP }
.Netの世界では、ビットフラグを表す列挙型を除き、単数形を使用することをお勧めします。Javaに似たようなものがあるかどうか知りたいだけです。
.Net固有のように思われる関連質問:列挙の単数形または複数形?
回答:
Javaの列挙型(およびおそらく一般的な列挙型)は単数形でなければなりません。考えているのは、複数のプロトコルを選択するのではなく、値のリストで選択可能な1つのプロトコルを選択することです。
複数形がないことに注意してください:http : //docs.oracle.com/javase/tutorial/java/javaOO/enum.html
データベースのテーブル名またはJavaのクラスを定義するときと同じように、列挙型に単数形を使用することも最適なオプションです。使用方法を確認してください。
例を書いてみましょう:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Appointment {
private Day day;
public void setDay(Day day) {
this.day = day;
}
}
単数形では、日の属性の意図がはっきりとわかります。「日」は、この予定が開催される曜日です。それ以外の場合、メソッドのシグネチャはsetDay(Days day)になり、多くの人が予定が2日以上で発生するかどうか疑問に思うでしょう。
48時間勤務の会社で働いている場合、次のような定義を試みることができます。
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
そうすれば、あなたはあなたが仕事に行く日を設定することができます。しかし、それでも奇妙に見え、より良いオプションがあり、単数形を使用することです:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
今、あなたは本当に列挙型の意味を示しています。通常、どのドメインでも、列挙型の各定数は1つの要素に過ぎないため、列挙型に単数形を使用するのが最適なオプションです。
.NETについても言及しています。.NETの「フラグ」列挙型は、その列挙型をパラメータとして期待している場合、実際に取得するのはその列挙型の要素のリスト(整数として格納されている)であることを意味します。
// Define an Enum with FlagsAttribute.
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
public void setMultiHue(MultiHue hues);
Javaでも同じことができますが、列挙型はまだ単数形です。
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;
}
}
Javaでこれを行うには、より多くのメモリを使用しますが、より簡単で明確なのは、単にリストを使用することです。