`

Java 的枚举(Enums) 可以实现接口(Interfaces)

阅读更多

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() 方法可用来返回接口中的一个数组

 

分享到:
评论

相关推荐

    java_jdk_api文档

    4. **枚举(Enums)**:Java枚举是一种特殊的类,用于定义一组预定义的常量。例如,`java.util.concurrent.TimeUnit`枚举定义了时间单位,如`NANOSECONDS`、`MILLISECONDS`等。 5. **异常(Exceptions)**:Java...

    java帮助文档docs

    类可以实现一个或多个接口,从而强制执行某种行为规范。例如,`java.io.Serializable`接口表示类可以被序列化。 4. **枚举(Enums)**:枚举类型是Java 5引入的,用于定义一组固定的常量,比如`java.util....

    javaAPI中文文档

    4. **枚举(Enums)**:Java 5引入了枚举类型,它是一种特殊的类,可以列举出一组预定义的值。例如,`java.util.Calendar`中的`WeekFields`枚举用于定义一周的开始日和一周的天数。 5. **异常(Exceptions)**:...

    effective-java 配套代码

    8. **方法的默认参数(Default Method Parameters)**: 从Java 8开始,接口可以有默认方法,这为接口提供了扩展功能而不会破坏旧实现的能力。 9. **异常处理(Exception Handling)**: 书中阐述了何时抛出异常,...

    Java源码查看类的声明.rar

    枚举类型可以有方法和字段,也可以实现接口。 通过学习和理解上述知识点,你可以更好地查看和解析Java源码中的类声明,从而更有效地进行程序设计。这个压缩包提供的示例可能涵盖了这些概念,通过实践案例,可以帮助...

    JavaAPI文档

    3. **接口(Interfaces)**:接口定义了一组方法的签名,但不提供实现。它们用于实现多继承和定义契约。例如,`Comparable<T>`接口定义了一个比较方法,使得任何实现了这个接口的类的对象可以相互比较。 4. **枚举...

    java帮助文档

    类可以实现接口,从而承诺实现接口中声明的所有方法。例如,`Comparable`接口用于定义对象之间的比较规则,`Runnable`接口则是线程执行的入口。 4. **枚举(Enums)**:Java 5引入了枚举类型,它是一种特殊的类,...

    java的开发类库jdk的帮助文档

    类可以实现接口,从而保证遵循接口定义的行为规范。例如,`java.io.Serializable`接口标识了对象可以进行序列化。 4. **枚举(Enums)**:Java支持枚举类型,这是一种特殊的类,用于表示一组固定数量的值。枚举常...

    JAVA API官方文档中文版.zip

    4. **枚举(Enums)**:Java 5引入的枚举类型,用于定义一组固定的常量,如`java.util.concurrent.TimeUnit`中的`NANOSECONDS`、`MICROSECONDS`等。 5. **异常(Exceptions)**:Java使用异常处理机制来处理程序...

    JavaAPI中文版

    类可以通过实现接口来保证其具备特定的行为。例如,`java.io.Serializable`接口标记一个类可以被序列化,使得对象的状态可以保存和恢复。 4. **枚举(Enums)**:Java 5引入的枚举类型,用于表示一组固定数量的值,...

    java帮助文档API

    4. **枚举(Enums)**:枚举类型用于定义一组固定的常量,如`java.util.Calendar`中的月份枚举`Month`。 5. **异常(Exceptions)**:Java使用异常处理机制来处理程序运行时可能出现的错误或异常情况,如`...

    java APi文档

    4. **枚举(Enums)**:从Java 5开始,枚举类型提供了一种创建固定数量的常量集合的方式,如`java.time.DayOfWeek`枚举表示一周的天数。 5. **异常(Exceptions)**:Java使用异常处理来处理程序运行时可能出现的...

    Java API 文档(英文版)

    4. **枚举(Enums)**:Java 5引入的枚举类型,常用于定义固定的常量集合,如`java.util.concurrent.TimeUnit`中的各种时间单位。 5. **异常(Exceptions)**:Java的异常处理机制是通过`Exception`类及其子类实现...

    Java JDK API 中文文档

    4. **枚举(Enums)**:从Java 5开始引入,枚举是一种特殊的类,用于定义固定数量的常量,如`java.util.Calendar`中的`Month`枚举。 5. **异常(Exceptions)**:Java使用异常处理来管理运行时错误。`Exception`类...

    java实例源码

    4. **接口(Interfaces)**:Java中的接口定义了一组方法签名,允许类实现多继承。接口文件也以`.java`结尾,如`MyInterface.java`。 5. **异常(Exceptions)**:Java支持异常处理,通过`try-catch-finally`块来...

    Core Java Vol I 8th

    7. **接口(Interfaces)**:介绍接口的概念,以及如何使用接口实现抽象和多继承。 8. **异常处理(Exception Handling)**:讲解如何使用try-catch-finally语句块捕获和处理异常,以及预定义的异常类。 9. **集合...

    java specification

    12. 枚举和注解(Enums and Annotations):解释了枚举类型如何在Java中定义和使用,以及如何创建和使用注解。 13. 预定义类和接口(Predefined Classes and Interfaces):对Java标准库中的关键类和接口(如System...

    JAVA程序设计汇总PPT教案学习.pptx

    - 接口是定义行为的蓝图,不包含实现,类可以实现一个或多个接口来规定其必须实现的方法。 10. **Java平台** - J2ME (Java 2 Micro Edition) 用于嵌入式设备和移动设备。 - J2SE (Java 2 Standard Edition) 是...

    API 英文文档

    7. **枚举(Enums)**:自Java 5引入枚举类型,它们是一种特殊的类,用于定义固定数量的常量,如方向的四个方向`NORTH`, `SOUTH`, `EAST`, `WEST`。 8. **注解(Annotations)**:从Java 5开始,注解被引入,为...

    JDK_API查询文档

    - **枚举(Enums)**:枚举类型是Java 5引入的,用于表示一组固定的值,如`java.util.Calendar.DAY_OF_WEEK`。 - **异常(Exceptions)**:Java使用异常处理机制来处理程序运行时的错误。常见的异常类有`...

Global site tag (gtag.js) - Google Analytics