ホームページ >Java >&#&チュートリアル >Java の基本学習: Enum 型の使用方法
この記事では、Java で Enum 型を使用する方法を紹介します。困っている友人は参考にしていただければ幸いです。
1. 列挙型の概要
列挙型 (列挙型) ) はプログラミング言語の非常に初期に登場し、 類似した値のグループを ## 内の型にまとめるために使用されます。 #。この列挙型の名前は、定数の定義と同様に、一意の型記述子として定義されます。ただし、定数型と比較して、列挙型は、宣言された 変数に対してより大きな値の範囲を提供できます。
たとえば、虹を 7 色で描画したい場合は、Java プログラムで定数を定義することで実現できます。Public static class RainbowColor {
// 红橙黄绿青蓝紫七种颜色的常量定义
public static final int RED = 0;
public static final int ORANGE = 1;
public static final int YELLOW = 2;
public static final int GREEN = 3;
public static final int CYAN = 4;
public static final int BLUE = 5;
public static final int PURPLE = 6;
}
を直接参照できます。ただし、このアプローチにはまだいくつかの問題があります。 #型は安全ではありません
色定数の対応する値は整数なので、プログラムの実行中にカラー変数に任意の整数値を渡してエラーを引き起こす可能性が非常に高くなります。
名前空間なし
色定数はクラスの単なるプロパティであるため、クラスを介してアクセスする必要があります。
一貫性が低い
整数列挙はコンパイル時の定数であるため、コンパイル プロセス 完了後、すべてのクライアント側およびサーバー側の参照には整数値が直接書き込まれます。このように、古い列挙型整数値を変更するか、新しい列挙値を追加する場合、参照されているすべてのコードを再コンパイルする必要があります。再コンパイルしないと、実行時にエラーが発生します。
#型には意味がありません
色の列挙値は意味がないからです。任意の意味を持つ整数値。実行時にデバッグすると、ログに多数のマジックナンバーがあることがわかりますが、プログラマ自身を除いて、他の人がその 意味を理解するのは困難です# ####。
2. Enum 型の定義方法
改善するために、この点における Java 言語の欠点は、SDK の 5.0 バージョンがリリースされたときに、言語レベルに列挙型が追加されました。列挙型の定義も非常に簡単です。enum キーワードと名前、および中括弧で囲まれた列挙値の本体を使用するだけです。たとえば、上記の虹色は、新しい enum メソッドを使用して再定義できます。 上記の定義形式からすると、Java の列挙型は非常に単純であるように見えますが、実際には Java 言語仕様によって列挙型に与えられる関数は次のようになります。非常に強力なので、
単に整数値をオブジェクトに変換するだけでなく、列挙型の定義を完全に機能するクラス定義に変換します。この型定義拡張により、開発者は列挙型にメソッドとプロパティを追加し、インターフェイスを実装できるようになります。 さらに、Java プラットフォームは、
Enum 型
の高品質な実装も提供します。たとえば、Comparable および開発者が許可するシリアル化可能なインターフェイス 通常、これらの詳細について心配する必要はありません。回到本文的主题上来,引入枚举类型到底能够给我们开发带来什么样好处呢?一个最直接的益处就是扩大 switch 语句使用范围。5.0 之前,Java 中 switch 的值只能够是简单类型,比如 int、byte、short、char, 有了枚举类型之后,就可以使用对象了。这样一来,程序的控制选择就变得更加的方便,看下面的例子: 定义 Enum 类型 对于这些枚举的日期,JVM 都会在运行期构造成出一个简单的对象实例一一对应。这些对象都有唯一的 identity,类似整形数值一样,switch 语句就根据此来进行执行跳转。 如何定制 Enum 类型 除了以上这种最常见的枚举定义形式外,如果需要给枚举类型增加一些复杂功能,也可以通过类似 class 的定义来给枚举进行定制。比如要给 enum 类型增加属性,可以像下面这样定义: 上面头条新闻的枚举类型增加了一个 RSS 地址的属性 , 记录头条新闻的访问地址。同时,需要外部传入 RSS 访问地址的值,因而需要定义一个构造函数来初始化此属性。另外,还需要向外提供方法来读取 RSS 地址。// 定义一周七天的枚举类型
public enum WeekDayEnum { Mon, Tue, Wed, Thu, Fri, Sat, Sun }
// 读取当天的信息
WeekDayEnum today = readToday();
// 根据日期来选择进行活动
switch(today) {
Mon: do something; break;
Tue: do something; break;
Wed: do something; break;
Thu: do something; break;
Fri: do something; break;
Sat: play sports game; break;
Sun: have a rest; break;
}
// 定义 RSS(Really Simple Syndication) 种子的枚举类型
public enum NewsRSSFeedEnum {
// 雅虎头条新闻 RSS 种子
YAHOO_TOP_STORIES("<a href="http://rss.news.yahoo.com/rss/topstories"><code>http://rss.news.yahoo.com/rss/topstories</code></a>"),
//CBS 头条新闻 RSS 种子
CBS_TOP_STORIES("<a href="http://feeds.cbsnews.com/CBSNewsMain?format=xml"><code>http://feeds.cbsnews.com/CBSNewsMain?format=xml</code></a>"),
// 洛杉矶时报头条新闻 RSS 种子
LATIMES_TOP_STORIES("<a href="http://feeds.latimes.com/latimes/news?format=xml"><code>http://feeds.latimes.com/latimes/news?format=xml</code></a>");
// 枚举对象的 RSS 地址的属性
private String rss_url;
// 枚举对象构造函数
private NewsRSSFeedEnum(String rss) {
this.rss_url = rss;
}
// 枚举对象获取 RSS 地址的方法
public String getRssURL() {
return this.rss_url;
}
}
以上がJava の基本学習: Enum 型の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。