Java の基本学習: Enum 型の使用方法

青灯夜游
リリース: 2018-10-19 16:50:42
転載
2269 人が閲覧しました

この記事では、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 类型

// 定义一周七天的枚举类型         
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; 
}
ログイン後にコピー

对于这些枚举的日期,JVM 都会在运行期构造成出一个简单的对象实例一一对应。这些对象都有唯一的 identity,类似整形数值一样,switch 语句就根据此来进行执行跳转。

如何定制 Enum 类型

除了以上这种最常见的枚举定义形式外,如果需要给枚举类型增加一些复杂功能,也可以通过类似 class 的定义来给枚举进行定制。比如要给 enum 类型增加属性,可以像下面这样定义:

// 定义 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; 
   } 
}
ログイン後にコピー

上面头条新闻的枚举类型增加了一个 RSS 地址的属性 , 记录头条新闻的访问地址。同时,需要外部传入 RSS 访问地址的值,因而需要定义一个构造函数来初始化此属性。另外,还需要向外提供方法来读取 RSS 地址。

以上がJava の基本学習: Enum 型の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート