在枚举中使用抽象方法
/** * 为枚举类定义一个抽象方法,<br/> * 这个抽象方法由不同的枚举值提供不同的实现 * * @author wangzhu * @date 2014-9-15下午5:35:04 * */ public enum EnumOption { PLUS { @Override public double eval(double x, double y) { return x + y; } }, MINUS { @Override public double eval(double x, double y) { return x - y; } }, TIMES { @Override public double eval(double x, double y) { return x * y; } }, DIVIDE { @Override public double eval(double x, double y) { return x / y; } }; public abstract double eval(double x, double y); }
在枚举中实现接口
public interface GenderDesc { void info(); } /** * 实现接口的枚举类 * * @author wangzhu * @date 2014-9-15下午5:34:44 * */ public enum EnumGender3 implements GenderDesc { MALE("男") { @Override public void info() { System.out.println("男子标记"); } }, FEMALE("女") { @Override public void info() { System.out.println("女子标记"); } }; private final String name; private EnumGender3(String name) { this.name = name; } public String getName() { return this.name; } }
备注:
// 编译通过,运行异常,因为在switch的时候真正使用的是enumGender3.ordinal()而不是enumGender3 EnumGender3 enumGender3 = null; switch (enumGender3) { case MALE: System.out.println("EnumGender1 男"); break; case FEMALE: System.out.println("EnumGender1 女"); break; default: System.out.println("EnumGender1 其他"); break; }
package com.wangzhu.enumutil; /** * 应用枚举实现的工厂方法 * * @author wangzhu * @date 2015-1-4下午4:36:07 * */ public enum EnumFactory { Cat { @Override public Animal create() { return new Cat(); } }, Dog { @Override public Animal create() { return new Dog(); } }; public abstract Animal create(); } class Animal { } class Cat extends Animal { } class Dog extends Animal { }