`
racingbird
  • 浏览: 23946 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

枚举类enum

 
阅读更多

 

一般来说,我们希望每个美剧实例能够返回对自身的描述,

而不仅仅只是默认的toString()实现,这只能返回枚举实例的名字。

为此,你可以提供一个构造器,专门负责处理这个额外的信息,

然后添加一个方法,返回这个描述信息。

 

注意: 下面代码提供了个 private 的构造函数, 而且里面的参数是  额外信息的类型

 

 

public enum OzWitch {
	WEST("MIss GUICh"),
	NORTH("Glinda");
	private String description;
	private OzWitch(String desc){
		this.description = desc;
	}
	public String getDescription(){
		return description;
	}
	public static void main(String[] args) {
		for(OzWitch witch : OzWitch.values())
			System.out.println(witch+" : "+witch.getDescription());
	}
}

 

例子2: 变形

public enum Meal2 {
	APPETIZE(Food.Appetizer.class),
	MAINCOURSE(Food.MainCourse.class);
	private Food[] values;
	private Meal2(Class<? extends Food> kind){
		values = kind.getEnumConstants();
	}
	public static void main(String[] args) {
		for(Meal2 meal : Meal2.values()){
			...
		}
	}
}

 interface Food {
	enum Appetizer implements Food{
		SALAD, SOUP, SPRING_ROLLS;
	}
	enum MainCourse implements Food{
		LASAGNE, BURRITO, PAD_THAI;
	}
}
 

 

 

注意,如果定义自己的方法,则必须在enum实例序列的最后添加

 

一个分号。同时, java要求必须先定义enum实例。 如果在enum

实例之前定义了任何方法或属性,那么在编译时就会得到错误信息。

 

 

 

2

覆盖toSting()方法,生成不同是字符串描述信息。

 

 

3

在swithc语句中使用enum


 

4
利用反射来查看enum 中的 values()

enum Explore{HERE, THERE}

public class Reflection {
	public static Set<String> analyze(Class<?> enumClass){
		System.out.println("---- Analyzing "+enumClass+"----");
		System.out.println("Interfaces");
		for(Type t : enumClass.getGenericInterfaces())
			System.out.println(t);
		System.out.println("Base: "+enumClass.getSuperclass());
		System.out.println("Methods: ");
		Set<String> methods = new TreeSet<String>();
		for(Method m : enumClass.getMethods())
			methods.add(m.getName());
		System.out.println(methods);
		return methods;
			
	}
	public static void main(String[] args) {
		Set<String> exploreMethods = analyze(Explore.class);
		Set<String> enumMethods = analyze(Enum.class);
		System.out.println("Explore.containsAll(Enum)?"+exploreMethods.containsAll(enumMethods));
		System.out.println("Explore.removeAll(enum):-"+exploreMethods.removeAll(enumMethods));
		System.out.println(exploreMethods);
		OSExcute.command("javap Explore");
	}
}
 
答案是, values()是由编译器添加的static方法,可以看出在创建Explore的
过程中,编译器还为其添加了valueOf()方法,这可能有点令人迷惑,Enum类
不是已经有valueOf()方法了嘛。
不过Enum中的valueOf()方法需要2个参数,而这个新增的方法只需一个参数。
由于这里使用的Set只是存储方法的名字,而不考虑方法的签名,所以在调用
Explore.removeAll(Enum)之后,就只剩下[values]了。

如果将enum实例向上转型为Enum,那么values()方法就不可访问了。
不过,在Class中有一个getEnuConstants()方法,所以即便Enum
接口中没有values()方法,我们仍然可以通过Class对象获得所有enum实例

public class UpcastEnum
{
	public static void main(String[] args){
		Search[] vals = Search.values();
		Enum e = Search.HIGHER;
		
		// e.values(); // No values() in Enum
		for(Enum en : e.getClass().getEnumConstants())
			System.out.println(en);
	}
}
 
因为getEnumConstant()是Class上的方法,所以你甚至可以对不是每句的类调用此方法:
只不过,此时该方法返回null,所以当你试图使用其返回的结果时回发生异常。


分享到:
评论

相关推荐

    java 中枚举类enum的values()方法的详解

    Java 中枚举类 enum 的 values() 方法详解 Java 中的枚举类 enum 是一种特殊的类,通过使用 enum 关键字来定义。枚举类 enum 中有一个特殊的方法,values(),这个方法可以将枚举类转换为一个枚举类型的数组。通过...

    常用的MIME TYPE类型枚举类Enum整理 静态方法直接检索使用

    全面覆盖:本枚举类内置了广泛使用的MIME类型,从常见的文本、图片、音频到视频格式,应有尽有。 智能检索:提供基于文件扩展名的MIME类型查询方法,只需一行代码即可获取,极大提升了开发效率。 易用性:采用枚举...

    Java枚举类型Enum的用法

    在枚举内部,可以通过`Enum&lt;E extends Enum&lt;E&gt;&gt;`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...

    hycBook#bk_python#13.枚举类Enum1

    案例简单枚举类定义由于枚举类的“new”方法,将会保证内存中只会存在一个枚举类的实例from enum import Enum这样我们就获得了Month类型的枚

    Java SE程序 Enum枚举类

    Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...

    枚举语句enum用法详解

    枚举(enum)在编程语言中是一种非常有用的类型,它允许我们定义一组命名常量,这些常量通常代表一组相关的值。在C#中,枚举(enum)被广泛用于增强代码的可读性和可维护性。下面我们将深入探讨C#中的枚举用法。 一...

    Java枚举类enum介绍

    Java枚举类(enum)是Java 1.5版本引入的一种新的类型,它提供了一种安全且优雅的方式来表示一组固定的常量。枚举类在Java中是一种特殊的类,它默认继承自`java.lang.Enum`,并且具有自己的特性与规则。 1. 构造器...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    本项目"test-enum-demo-master"显然是一个用于演示如何通过反射来操作枚举类的示例。 首先,让我们理解枚举类的基本概念。枚举类在Java中用于定义一组相关的固定数量的值,这些值通常代表常量。例如: ```java ...

    c#遍历枚举(ENUM)类型的方法

    c#遍历枚举(ENUM)类型的方法,简单实用,适合c#初学者

    enum枚举类的应用

    包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。

    java enum 枚举 学习资料

    "Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊...Java Enum 枚举学习资料提供了一个详细的教程,涵盖了枚举语法、枚举类的特点、枚举类中的方法等方面的知识点,适合新手学习和实践。

    Java中的枚举类型Enum示例源代码

    每个枚举常量都是`Color`类的一个实例,它们自动地继承自`java.lang.Enum`类。 枚举类型的常量可以直接通过名字来引用,无需创建实例,例如: ```java Color color = Color.RED; ``` 枚举类型可以有构造函数,但...

    java 枚举(enum) 详解(学习资料)

    枚举类必须使用 `enum` 关键字声明,语法如下: ```java enum 枚举修饰符 enumname { 枚举常量1, 枚举常量2, ... ; } ``` 其中,`枚举修饰符` 可以是访问修饰符(如 `public`, `protected`, `private` 或者...

    java枚举类型enum的使用

    在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来处理一组固定的数据集合。枚举中的每个元素都是该枚举类型的对象...

    高阶Java-Java枚举类型 enum 应用详解

    在Java编程语言中,枚举(enum)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int类型的硬编码值更安全、更具可读性。本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用...

    enum枚举类的一些代码demo

    在Java编程语言中,`enum`(枚举)是一种特殊的类,用于定义一组固定的常量。枚举在很多场景下非常有用,例如表示状态、颜色、星期等有限且不变的集合。下面我们将深入探讨`enum`枚举类的使用方法,并通过具体的代码...

    56个民族枚举类

    标题中的“56个民族枚举类”指的是在编程中创建的一个枚举(Enumeration)类,用于表示中国56个不同的民族。枚举是面向对象编程中的一种数据类型,它允许我们定义一组有限的常量,这些常量代表了特定的值。在这个...

    C++枚举类型enum与enum class的使用

    C++枚举类型enum与enum class的使用 以下是C++枚举类型enum与enum class的使用的相关知识点: 一、什么是枚举类型? 枚举类型是一种特殊的数据类型,它的变量只能取枚举类型中定义的某个值。例如,性别只有男和女...

    Java枚举(enum)类型深度解析:特性、用法与最佳实践

    在Java中,枚举(enum)类型是一种特殊的类,它定义了一组有限的常量。枚举类型提供了一种更清晰、更安全的方式来处理一组固定的常量值。本文将深入探讨Java枚举类型的特点、用法以及最佳实践。 Java中的枚举类型是...

    Java JDBC简单入门之枚举(Enum)、泛型、反射、JDBC整合

    本篇将介绍如何在Java中使用枚举(Enum)、泛型、反射以及整合JDBC的基本步骤。 一、枚举(Enum) 枚举在Java中是一种特殊的类,用于定义一组预定义的常量。在JDBC操作中,枚举可以用来表示数据库中的状态或者类型...

Global site tag (gtag.js) - Google Analytics