Maison  >  Article  >  Java  >  Apprentissage de base de Java : comment utiliser le type Enum

Apprentissage de base de Java : comment utiliser le type Enum

青灯夜游
青灯夜游avant
2018-10-19 16:48:142212parcourir

Cet article vous présente une introduction à l'utilisation du type Enum en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

1. Introduction au type Enum

Type énuméré (Type énuméré ) est apparu très tôt dans les langages de programmation Il est utilisé pour inclure un groupe de valeurs similaires dans un type Parmi elles <.>. Le nom de ce type d'énumération sera défini comme un descripteur de type unique, similaire à la définition d'une constante. Cependant, par rapport aux types constants, les types d'énumération peuvent fournir une plage de valeurs plus large pour les variables déclarées par .

Par exemple, si vous souhaitez dessiner sept couleurs pour l'arc-en-ciel, vous pouvez le faire via une définition constante dans un programme Java. Lorsque vous utilisez

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; 
}

, vous pouvez référencer directement ces constantes dans le programme. Cependant, cette approche pose encore quelques problèmes.

Type unsafe

Puisque la valeur correspondante de la constante de couleur est un entier, Il est donc très possible de transmettre une valeur entière arbitraire à la variable de couleur lors de l'exécution du programme, provoquant une erreur.

n'a pas d'espace de noms

Puisque les constantes de couleur ne sont que des attributs de la classe, lorsque vous utilisez doivent être accessibles via les classes.

Mauvaise cohérence

Étant donné que les énumérations entières sont des constantes au moment de la compilation, le processus de compilation Une fois terminé, toutes les références côté client et serveur auront des valeurs entières écrites directement. De cette façon, lorsque vous modifiez l'ancienne valeur entière d'énumération ou ajoutez une nouvelle valeur d'énumération, tout le code référencé doit être recompilé, sinon des erreurs se produiront au moment de l'exécution.

Le type n'a aucune signification

Puisque les valeurs d'énumération des couleurs sont simplement certaines valeurs entières ayant une signification, si vous déboguez au moment de l'exécution, vous constaterez qu'il y a de nombreux nombres magiques dans le journal, mais à l'exception des programmeurs eux-mêmes, il est difficile pour les autres de comprendre leur signification .

2. Comment définir le type Enum

Afin d'améliorer les lacunes du langage Java à cet égard, lors de la sortie de la version 5.0 du SDK, des types d'énumération ont été ajoutés au niveau du langage. La définition d'un type d'énumération est également très simple. Utilisez simplement le mot-clé enum plus le nom et le corps de la valeur d'énumération entre accolades. Par exemple, la couleur arc-en-ciel mentionnée ci-dessus peut être redéfinie à l'aide de la nouvelle méthode enum :

D'après le formulaire de définition ci-dessus, il semble que le type d'énumération en Java soit très simple, mais en fait les fonctions données au type d'énumération par la spécification du langage Java sont très Il est si puissant qu'il

non seulement convertit simplement les valeurs entières en objets, mais transforme également la définition du type d'énumération en une définition de classe entièrement fonctionnelle. Cette extension de définition de type permet aux développeurs d'ajouter des méthodes et des propriétés au type d'énumération et d'implémenter n'importe quelle interface. De plus, la plate-forme Java fournit également des implémentations de haute qualité pour le type Enum Par exemple, la valeur par défaut implémente Comparable et. Interfaces sérialisables, permettant aux développeurs de Normalement, vous n'avez pas à vous soucier de ces détails.

回到本文的主题上来,引入枚举类型到底能够给我们开发带来什么样好处呢?一个最直接的益处就是扩大 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 地址。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer