>  기사  >  Java  >  기본 Java 학습: Enum 유형 사용 방법

기본 Java 학습: Enum 유형 사용 방법

青灯夜游
青灯夜游앞으로
2018-10-19 16:48:142266검색

이 글에서는 Java에서 Enum 유형을 사용하는 방법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 열거형 소개

열거형(Enumerated Type) 은 프로그래밍 언어에서 아주 일찍 등장했으며, 을 그룹화하는 데 사용됩니다. 유사 값은 유형에 포함됩니다. 이 열거 유형의 이름은 상수 정의와 유사한 고유한 유형 설명자로 정의됩니다. 그러나 상수 유형에 비해 열거 유형은 선언된 변수에 대해 더 큰 값 범위를 제공할 수 있습니다.

예를 들어 무지개의 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; 
}

를 사용하면 프로그램에서

이 상수를 직접 참조할 수 있습니다. 그러나 이 접근법에는 여전히 몇 가지 문제가 있습니다.

unsafe를 입력하세요

색상 상수의 해당 값이 정수이기 때문에, 프로그램 실행 중 색상 변수에 임의의 정수값을 전달하여 오류가 발생할 가능성이 매우 높습니다.

네임스페이스 없음

색상 상수는 클래스의 속성일 뿐이므로 사용할 때는 클래스를 통해 액세스해야 합니다.

낮은 일관성

정수 열거형은 컴파일 타임 상수이기 때문에 컴파일 프로세스가 완료된 후 모든 클라이언트 및 서버 측 참조는 직접 작성된 정수 값을 갖게 됩니다. 이러한 방식으로 이전 열거형 정수 값을 수정하거나 새 열거형 값을 추가하면 참조된 모든 코드를 다시 컴파일해야 합니다. 그렇지 않으면 런타임 시 오류가 발생합니다.

타입에는 의미가 없습니다

색상 열거값은 아무런 의미도 없는 정수값일 뿐이므로, 런타임에 디버그해 보면 매직넘버가 많이 있다는 것을 알 수 있습니다. 하지만 프로그래머 자신을 제외한 다른 사람들은 그

의미를 이해하기 어렵습니다.

2. Enum 타입 정의 방법

이러한 Java 언어의 단점을 개선하기 위해 SDK 5.0 버전이 출시되면서 Enum 타입이 언어에 추가되었습니다. 수준. 열거형의 정의도 매우 간단합니다. 열거형 키워드와 이름 및 열거형 값 본문을 중괄호로 묶어서 사용하면 됩니다. 예를 들어 위에서 언급한 무지개 색상은 새로운 열거형 메서드를 사용하여 재정의할 수 있습니다.

위 정의 형식으로 보면 Java의 열거형은 매우 간단해 보이지만 실제로 Java 언어 사양에서 열거형에 부여하는 기능은 매우 강력합니다.

단순한 정수 변환만은 아닙니다. 값을 객체로 변환하지만 열거 유형 정의를 완전한 기능을 갖춘 클래스 정의로 변환합니다. 이 유형 정의 확장을 통해 개발자는 열거형 유형에 메서드와 속성을 추가하고 인터페이스를 구현할 수 있습니다.

또한 Java 플랫폼은

Enum 유형에 대한 고품질 구현(예: Comparable 및 Serialsible 인터페이스의 기본 구현)을 제공하므로 개발자는 일반적으로 이러한 세부 사항에 신경 쓸 필요가 없습니다.

回到本文的主题上来,引入枚举类型到底能够给我们开发带来什么样好处呢?一个最直接的益处就是扩大 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제