Java 的枚举(Enums) 可以实现接口(Interfaces)
Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。
枚举类型,看似字符串值,但包含一些附加的信息,包括排序以及附加的方法可以获取枚举值的信息。
下面是一个基本的枚举类型:
public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES };
可增加附加信息,例如私有构造器、私有属性等,如下:
pubilc enum Number {
One(1), Two(2), Three(3);
private Number( int value){
this.value = value;
}
public int getValue(){
return this.value;
}
private int value;
}
在上面的例子中,引入了 getValue() 方法,这便是枚举的行为定义。
可以在其他类中调用定义的方法
public enum PayCodeEnum {
// 利用构造函数传参
ALIPAY("1"), NONE_MOBILE_EBPAY("2"), MOBILE_EBPAY("3"),
// 定义私有变量
private String code;
// 构造函数
PayCodeEnum(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public static PayCodeEnum getPayCodeEnumByCode(String code) {
for (PayCodeEnum payCodeEnum : PayCodeEnum.values()) {
if (payCodeEnum.getCode().equals(code)) {
return payCodeEnum;
}
}
return null;
}
}
在其他类中调用
if (PayCodeEnum.getPayCodeEnumByCode(payCode) == null) {
return 0;
}
枚举类型对接口的继承以及实际的用途。
枚举类型做一个接口,实现类和数据库表的一个映射:
public enum PersonMapping {
personId("INTEGER", true, false),
firstname("TEXT", false, false),
lastname("TEXT", false, false),
age("INTEGER", false, false);
private PersonMapping(String type, boolean key, boolean nullable )
{
this.type = type;
this.key = key;
this.nullable = nullable;
}
public String getType() {
return type;
}
public boolean isKey() {
return key;
}
public boolean isNullable() {
return nullable;
}
private final String type;
private final boolean key;
private final boolean nullable;
}
现在我们可以使用这个枚举来迭代所有字段并创建相应的表:
public String dbTableCreate(String tableName) {
StringBuilder builder = new StringBuilder("Create table ");
builder.append(tableName);
builder.append("(");
for (PersonMapping column : PersonMapping.values()) {
builder.append(column.name());
builder.append(" ");
builder.append(column.getType());
builder.append(column.isKey() ? " primary key" : "");
builder.append(", ");
}
builder = new StringBuilder(builder.substring(0, builder.length() - 2));
builder.append(");");
return builder.toString();
}
这个 PersonMapping 枚举类型看起来不错,但是它不允许我们使用不同的类到数据库的映射,因此我们需要抽象,需要接口。从上面的代码看,我们需要枚举类型两个通过的方法:name() 和 values(),第一个方法返回当前枚举值的名字,第二个就是列出所有的枚举值。
首先,为枚举添加一个接口:
public enum PersonMapping implements MappingEnum{
....
}
public interface MappingEnum {
public String getType();
public boolean isKey();
public boolean isNullable();
public String name();
}
然后再编写一个 dbTableCreate() 方法来让其他的枚举类型可重用这个方法:
public String dbTableCreate(String tableName, MappingEnum[] values) {
StringBuilder builder = new StringBuilder("Create table ");
builder.append(tableName);
builder.append("(");
for (MappingEnum column : values) {
builder.append(column.name());
builder.append(" ");
builder.append(column.getType());
builder.append(column.isKey() ? " primary key" : "");
builder.append(", ");
}
builder = new StringBuilder(builder.substring(0, builder.length() - 2));
builder.append(");");
return builder.toString();
}
最后总结
枚举类型可以存储附加的数据和方法
枚举类型可通过接口来定义行为
枚举类型的项行为可通过接口来访问,跟正常的 Java 类无异
values() 方法可用来返回接口中的一个数组
相关推荐
4. **枚举(Enums)**:Java枚举是一种特殊的类,用于定义一组预定义的常量。例如,`java.util.concurrent.TimeUnit`枚举定义了时间单位,如`NANOSECONDS`、`MILLISECONDS`等。 5. **异常(Exceptions)**:Java...
类可以实现一个或多个接口,从而强制执行某种行为规范。例如,`java.io.Serializable`接口表示类可以被序列化。 4. **枚举(Enums)**:枚举类型是Java 5引入的,用于定义一组固定的常量,比如`java.util....
4. **枚举(Enums)**:Java 5引入了枚举类型,它是一种特殊的类,可以列举出一组预定义的值。例如,`java.util.Calendar`中的`WeekFields`枚举用于定义一周的开始日和一周的天数。 5. **异常(Exceptions)**:...
8. **方法的默认参数(Default Method Parameters)**: 从Java 8开始,接口可以有默认方法,这为接口提供了扩展功能而不会破坏旧实现的能力。 9. **异常处理(Exception Handling)**: 书中阐述了何时抛出异常,...
枚举类型可以有方法和字段,也可以实现接口。 通过学习和理解上述知识点,你可以更好地查看和解析Java源码中的类声明,从而更有效地进行程序设计。这个压缩包提供的示例可能涵盖了这些概念,通过实践案例,可以帮助...
3. **接口(Interfaces)**:接口定义了一组方法的签名,但不提供实现。它们用于实现多继承和定义契约。例如,`Comparable<T>`接口定义了一个比较方法,使得任何实现了这个接口的类的对象可以相互比较。 4. **枚举...
类可以实现接口,从而承诺实现接口中声明的所有方法。例如,`Comparable`接口用于定义对象之间的比较规则,`Runnable`接口则是线程执行的入口。 4. **枚举(Enums)**:Java 5引入了枚举类型,它是一种特殊的类,...
类可以实现接口,从而保证遵循接口定义的行为规范。例如,`java.io.Serializable`接口标识了对象可以进行序列化。 4. **枚举(Enums)**:Java支持枚举类型,这是一种特殊的类,用于表示一组固定数量的值。枚举常...
4. **枚举(Enums)**:Java 5引入的枚举类型,用于定义一组固定的常量,如`java.util.concurrent.TimeUnit`中的`NANOSECONDS`、`MICROSECONDS`等。 5. **异常(Exceptions)**:Java使用异常处理机制来处理程序...
类可以通过实现接口来保证其具备特定的行为。例如,`java.io.Serializable`接口标记一个类可以被序列化,使得对象的状态可以保存和恢复。 4. **枚举(Enums)**:Java 5引入的枚举类型,用于表示一组固定数量的值,...
4. **枚举(Enums)**:枚举类型用于定义一组固定的常量,如`java.util.Calendar`中的月份枚举`Month`。 5. **异常(Exceptions)**:Java使用异常处理机制来处理程序运行时可能出现的错误或异常情况,如`...
4. **枚举(Enums)**:从Java 5开始,枚举类型提供了一种创建固定数量的常量集合的方式,如`java.time.DayOfWeek`枚举表示一周的天数。 5. **异常(Exceptions)**:Java使用异常处理来处理程序运行时可能出现的...
4. **枚举(Enums)**:Java 5引入的枚举类型,常用于定义固定的常量集合,如`java.util.concurrent.TimeUnit`中的各种时间单位。 5. **异常(Exceptions)**:Java的异常处理机制是通过`Exception`类及其子类实现...
4. **枚举(Enums)**:从Java 5开始引入,枚举是一种特殊的类,用于定义固定数量的常量,如`java.util.Calendar`中的`Month`枚举。 5. **异常(Exceptions)**:Java使用异常处理来管理运行时错误。`Exception`类...
4. **接口(Interfaces)**:Java中的接口定义了一组方法签名,允许类实现多继承。接口文件也以`.java`结尾,如`MyInterface.java`。 5. **异常(Exceptions)**:Java支持异常处理,通过`try-catch-finally`块来...
7. **接口(Interfaces)**:介绍接口的概念,以及如何使用接口实现抽象和多继承。 8. **异常处理(Exception Handling)**:讲解如何使用try-catch-finally语句块捕获和处理异常,以及预定义的异常类。 9. **集合...
12. 枚举和注解(Enums and Annotations):解释了枚举类型如何在Java中定义和使用,以及如何创建和使用注解。 13. 预定义类和接口(Predefined Classes and Interfaces):对Java标准库中的关键类和接口(如System...
- 接口是定义行为的蓝图,不包含实现,类可以实现一个或多个接口来规定其必须实现的方法。 10. **Java平台** - J2ME (Java 2 Micro Edition) 用于嵌入式设备和移动设备。 - J2SE (Java 2 Standard Edition) 是...
7. **枚举(Enums)**:自Java 5引入枚举类型,它们是一种特殊的类,用于定义固定数量的常量,如方向的四个方向`NORTH`, `SOUTH`, `EAST`, `WEST`。 8. **注解(Annotations)**:从Java 5开始,注解被引入,为...
- **枚举(Enums)**:枚举类型是Java 5引入的,用于表示一组固定的值,如`java.util.Calendar.DAY_OF_WEEK`。 - **异常(Exceptions)**:Java使用异常处理机制来处理程序运行时的错误。常见的异常类有`...