一般来说,我们希望每个美剧实例能够返回对自身的描述,
而不仅仅只是默认的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,所以当你试图使用其返回的结果时回发生异常。
发表评论
-
仿真[汽车制造]
2012-02-13 01:26 697class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1040package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 663class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 750public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 839使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发2[使用enum分发]
2012-02-05 18:09 1911直接将RoShamBo1.java翻译为基于enum的版 ... -
多路分发
2012-02-05 02:06 1394多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 938public enum Input { NICKEL ... -
使用enum的责任链
2012-02-04 12:39 1193package enumerated; impor ... -
枚举类Enum,EnumSet,EnumMap
2012-02-04 02:00 1438EnumSet与HashSet相比,非常快。 p ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 636Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 984Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 803{ public static void main( ... -
散列HashCode
2012-02-01 14:04 713散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 593Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 319如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
享元Map
2012-01-30 00:28 384这里之所以叫享元,注意static关键字。 定制了Entry ... -
深入容器Map
2012-01-19 15:12 402Map生成器 对Map的使用相同的方式,需要一 ... -
深入容器List
2012-01-19 14:40 347一种Generator解决方案: 所有Collect ... -
泛型数组
2012-01-19 00:57 644不能创建泛型数组,但能通过转型来赋予 public cl ...
相关推荐
Java 中枚举类 enum 的 values() 方法详解 Java 中的枚举类 enum 是一种特殊的类,通过使用 enum 关键字来定义。枚举类 enum 中有一个特殊的方法,values(),这个方法可以将枚举类转换为一个枚举类型的数组。通过...
全面覆盖:本枚举类内置了广泛使用的MIME类型,从常见的文本、图片、音频到视频格式,应有尽有。 智能检索:提供基于文件扩展名的MIME类型查询方法,只需一行代码即可获取,极大提升了开发效率。 易用性:采用枚举...
在枚举内部,可以通过`Enum<E extends Enum<E>>`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...
案例简单枚举类定义由于枚举类的“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枚举类...
枚举(enum)在编程语言中是一种非常有用的类型,它允许我们定义一组命名常量,这些常量通常代表一组相关的值。在C#中,枚举(enum)被广泛用于增强代码的可读性和可维护性。下面我们将深入探讨C#中的枚举用法。 一...
Java枚举类(enum)是Java 1.5版本引入的一种新的类型,它提供了一种安全且优雅的方式来表示一组固定的常量。枚举类在Java中是一种特殊的类,它默认继承自`java.lang.Enum`,并且具有自己的特性与规则。 1. 构造器...
本项目"test-enum-demo-master"显然是一个用于演示如何通过反射来操作枚举类的示例。 首先,让我们理解枚举类的基本概念。枚举类在Java中用于定义一组相关的固定数量的值,这些值通常代表常量。例如: ```java ...
c#遍历枚举(ENUM)类型的方法,简单实用,适合c#初学者
包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。
"Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊...Java Enum 枚举学习资料提供了一个详细的教程,涵盖了枚举语法、枚举类的特点、枚举类中的方法等方面的知识点,适合新手学习和实践。
每个枚举常量都是`Color`类的一个实例,它们自动地继承自`java.lang.Enum`类。 枚举类型的常量可以直接通过名字来引用,无需创建实例,例如: ```java Color color = Color.RED; ``` 枚举类型可以有构造函数,但...
枚举类必须使用 `enum` 关键字声明,语法如下: ```java enum 枚举修饰符 enumname { 枚举常量1, 枚举常量2, ... ; } ``` 其中,`枚举修饰符` 可以是访问修饰符(如 `public`, `protected`, `private` 或者...
在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来处理一组固定的数据集合。枚举中的每个元素都是该枚举类型的对象...
在Java编程语言中,枚举(enum)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int类型的硬编码值更安全、更具可读性。本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用...
在Java编程语言中,`enum`(枚举)是一种特殊的类,用于定义一组固定的常量。枚举在很多场景下非常有用,例如表示状态、颜色、星期等有限且不变的集合。下面我们将深入探讨`enum`枚举类的使用方法,并通过具体的代码...
标题中的“56个民族枚举类”指的是在编程中创建的一个枚举(Enumeration)类,用于表示中国56个不同的民族。枚举是面向对象编程中的一种数据类型,它允许我们定义一组有限的常量,这些常量代表了特定的值。在这个...
C++枚举类型enum与enum class的使用 以下是C++枚举类型enum与enum class的使用的相关知识点: 一、什么是枚举类型? 枚举类型是一种特殊的数据类型,它的变量只能取枚举类型中定义的某个值。例如,性别只有男和女...
在Java中,枚举(enum)类型是一种特殊的类,它定义了一组有限的常量。枚举类型提供了一种更清晰、更安全的方式来处理一组固定的常量值。本文将深入探讨Java枚举类型的特点、用法以及最佳实践。 Java中的枚举类型是...
本篇将介绍如何在Java中使用枚举(Enum)、泛型、反射以及整合JDBC的基本步骤。 一、枚举(Enum) 枚举在Java中是一种特殊的类,用于定义一组预定义的常量。在JDBC操作中,枚举可以用来表示数据库中的状态或者类型...