今天在看lucene源代码是看到其中的Store、Index等几个枚举类型里面不仅定义了方法,而其实例中也定义了方法,晚上回来又学习了一下Enum,整理写了这个博客。
第一个代码片段:
package com.lfl.em; public enum Coin { penny("10p"), dollor("20$"), rmb("30¥"); private String value; public String getValue() { return value; } Coin(String value) { this.value = value; } public static void main(String[] args) { Coin coin = Coin.dollor; System.out.println(coin.getValue()); System.out.println(coin.getDeclaringClass()); } }
coin.getDeclaringClass() 输出 com.lfl.em.Coin
第二个代码片段:
package com.lfl.em; public interface ISeason { public String mySeason(); }
package com.lfl.em; public class SeasonImpl implements ISeason { public enum Season implements ISeason { SPRING { @Override public String yourSeason() { return null; } }, SUMMER { public String mySeason() { return "夏季"; } @Override public String yourSeason() { return null; } }, AUTUMN { public String mySeason() { return "秋季"; } @Override public String yourSeason() { return null; } }, WINTER { public String mySeason() { return "冬季"; } @Override public String yourSeason() { return null; } }; public String mySeason() { return "未知季节"; } public static String mySeason(Season season) { if (Season.SPRING == season) { return "春季"; } else if (Season.SUMMER == season) { return "夏季"; } else if (Season.AUTUMN == season) { return "秋季"; } else if (Season.WINTER == season) { return "冬季"; } return "未知季节"; } public abstract String yourSeason(); } @Override public String mySeason() { return "我和季节枚举没有关系啊!"; } public static void main(String[] args) { Season a = Season.AUTUMN; String a1 = a.mySeason(); String a2 = Season.mySeason(a); System.out.println(a1 + " == " + a2); Season s = Season.SPRING; String s1 = s.mySeason(); String s2 = Season.mySeason(s); System.out.println(s1 + " != " + s2); } }
两个输出分别为:
秋季 == 秋季
未知季节 != 春季
枚举可以通过implements实现某个接口,但不能通过extends继承某个类或枚举。
abstract不可以修饰枚举,因为枚举中定义的各个值其实是枚举的实例。
从以上两个例子可以看出 不仅枚举类型里可以定义方法,而其实例中也可以定义方法。
而枚举和枚举实例又有很“微妙”的关系,从第二个例子中可以看出枚举实例和枚举好像有继承关系,枚举实例必须实现枚举里的抽象方法;枚举或枚举实例必须实现枚举实现接口中的方法,在这个例子中是mySeason()方法。在eclipse提示中可以看到说枚举是枚举实例的supertype。
这种关系可能是在编译期通过编译器确立的,
对枚举的理解还不是很透彻,以上分析如果有不正确或不恰当的欢迎指正出来共同学习。
相关推荐
Java枚举类型的应用场景: * 定义一组具有相同特征的常量 * 实现状态机和事件处理 * 实现配置和设置 Java枚举类型的注意事项: * 枚举类型的构造器应该是私有的 * 枚举类型的成员变量应该是final的 * 枚举类型的...
这篇博客将深入探讨Java枚举的特性和使用方法,包括`EnumSet`和`EnumMap`这两个与枚举相关的数据结构。 首先,枚举定义的基本语法是`public enum EnumName {constant1, constant2, ...}`。每个枚举常量都是`...
Java枚举(enum)是Java语言提供的一种特殊的数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中是类的子类型,因此,它们具备类的一些特性,比如可以有方法、变量以及实现接口。...
在这个例子中,`Color`类的构造方法被私有化,确保外部不能直接创建新的实例,只能通过`getInstance`方法获取`RED`, `GREEN`, `BLUE`这三个预定义的颜色。这种方式虽然可以实现类似枚举的功能,但存在一定的局限性,...
在这个例子中,`processEnum`方法接收一个枚举类作为参数,通过反射获取枚举的所有值并打印出来。 总结来说,枚举和泛型是Java编程中的重要工具,它们各自解决了特定的问题,并且可以协同工作以提供更强大的功能。...
在这个例子中,`Gender`枚举有两个实例`MALE`和`FEMALE`,每个都有一个关联的名称。 总的来说,Java的枚举提供了一种强类型、安全、可读性高的方式来定义一组固定的值。它们可以包含方法、字段,并能与`switch`语句...
- 在上面的例子中,`Sex`枚举包含了两个值`MALE`和`FEMALE`;`Color`枚举包含了三个值`RED`、`GREEN`和`BLUE`。 2. **复杂枚举定义:** - 枚举不仅限于简单的常量定义,还可以拥有构造函数、方法和字段等。 ```...
在这个"Java个人练习的例子"中,我们可以看到作者通过实际的代码示例来加深对Java语言的理解,尤其是XML(eXtensible Markup Language)解析方面的应用。 XML是一种用于标记数据的通用标准,它允许数据在不同的系统...
6. 枚举在实际应用中的例子: - 在设计模式中,枚举常用于实现有限状态机,表示状态之间的转换。 - 在图形用户界面编程中,颜色枚举可以用来表示不同颜色选项。 - 在日期和时间处理中,枚举可以用于表示星期几。 ...
在Java中,可以直接使用`==`比较两个枚举变量是否相等,因为它们都是单例的。在C#中,枚举值可以通过`Equals`或`==`进行比较。 在工具方面,一些IDE(如IntelliJ IDEA,Visual Studio)提供了枚举代码自动生成和...
以下是关于Java枚举类型的一些关键知识点: 1. 构造函数:枚举类无法拥有公共构造函数,这意味着外部代码无法直接创建新的枚举实例,确保了枚举的唯一性。 2. 枚举常量属性:枚举类型的每个实例(枚举常量)都是...
每个常量都有两个字符串参数。 枚举的特点 枚举有以下几个特点: * 枚举是一种特殊的类,它继承自 java.lang.Enum 类。 * 枚举中的常量是public、static、final 的。 * 枚举可以使用toString()方法来获取枚举的...
以下是如何在枚举中定义属性和方法的一个例子: ```java public enum Status { ACTIVE("活跃"), INACTIVE("非活跃"); private String description; Status(String description) { this.description = ...
在这个例子中,`Color`枚举定义了三个常量:RED、GREEN和BLUE。这些常量可以直接使用,无需实例化。枚举可以包含方法,甚至可以继承其他类或接口,从而增加其功能。 在C#中,枚举的定义方式略有不同: ```csharp ...
在Java编程语言中,枚举(Enum)和反射(Reflection)是两个非常重要的特性,它们在实际开发中有着广泛的应用。下面将详细讲解这两个概念及其使用技巧。 **枚举(Enum)** 枚举是一种特殊的类,它允许我们定义一组...
这两个特性在实际开发中应用广泛。 8. **泛型**:泛型是Java 5引入的新特性,增强了类型安全性,允许在类、接口和方法中使用类型参数。通过例子代码,学习者可以理解泛型的用法和好处。 9. **Swing和AWT**:Java的...
在这个例子中,`Color`枚举包含了三种颜色及其对应的十六进制代码。可以访问这些属性和调用方法: ```java for (Color color : Color.values()) { System.out.println("Color " + color + " has hex code " + ...
`Food`接口定义了两个枚举类型`Coffee`和`Dessert`,它们都实现了`Food`接口。这种方式使得枚举可以根据类别进行分组,方便管理和使用。 枚举类型的使用显著提高了代码的结构性和可维护性。它们可以提供类型安全,...
10. **枚举与注解**:枚举提供了一种安全的常量表示方式,注解则提供了元数据,这两个特性在Java中也有广泛的应用。 11. **设计模式**:实例可能涵盖常见的设计模式,如单例模式、工厂模式、观察者模式等,这些都是...