`
racingbird
  • 浏览: 23368 次
  • 性别: 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(),这个方法可以将枚举类转换为一个枚举类型的数组。通过...

    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枚举类...

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

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

    Java枚举类enum介绍

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

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

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

    枚举语句enum用法详解

    enum.docx ,详细介绍了enum的用法,枚举用法在c#中比较常见,希望会有帮助哦

    enum枚举类的应用

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

    java enum 枚举 学习资料

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

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

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

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

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

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

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

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

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

    enum枚举类的一些代码demo

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

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

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

    枚举enum的一些案例

    枚举Enum的一些案例 枚举(enum)是一种特殊的值类型,它从 System.Enum 继承而来,并为基础的基元类型的值提供替代名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号(或无符号)整数...

    枚举的应用例题

    枚举(Enum)在编程语言中是一种非常重要的数据类型,它允许我们定义一组预定义的常量,这些常量通常代表特定的值或状态。枚举在很多编程场景下都有广泛的应用,例如在处理有限状态机、定义颜色、星期等具有固定数量...

    Java 枚举(enum)

    Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 例如定义一个颜色的枚举类。 enum Color { RED, GREEN, BLUE; } 以上枚举类 Color 颜色常量有 RED, GREEN, BLUE,分别表示红色,绿色,蓝色。 ...

    枚举类实现单例,并且解决序列化给前端展示的问题.zip

    本源码由 springboot 开发,只有2个简单的文件(1是 枚举类单例,2是 controller请求测试类)。 主要测试了枚举类的饿汉式加载机制 / 单例机制。 代码中包含枚举类的基本使用,和完整的请求示例。 主要实现了枚举类...

Global site tag (gtag.js) - Google Analytics