[TOC]
简介
转载:https://www.cnblogs.com/alter888/p/9163612.html
实际上在使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个相关的类,这个类继承了Java API中的java.lang.Enum类,也就是说通过关键字enum创建枚举类型在编译后事实上也是一个类类型而且该类继承自java.lang.Enum类。
构造器和抽象方法
public enum Calculator {
// 加法运算
ADD("+") {
public int exec(int a, int b) {
return a + b;
}
},
// 减法运算
SUB("-") {
public int exec(int a, int b) {
return a - b;
}
};
String value = "";
// 定义成员值类型
private Calculator(String _value) {
this.value = _value;
}
// 获得枚举成员的值
public String getValue() {
return this.value;
}
// 声明一个抽象函数
public abstract int exec(int a, int b);
}
实现接口
public interface CheckTypeInterface {
void checkType();
}
public enum Ifelse implements CheckTypeInterface {
ADD {
@Override
public void checkType() {
System.out.println("加法处理");
}
},
SUB {
@Override
public void checkType() {
System.out.println("减法处理");
}
};
}
public class IfelseMain {
public static void main(String[] args) {
String str = "ADD";
System.out.println(Ifelse.valueOf(str));
System.out.println(Ifelse.ADD);
System.out.println(Ifelse.valueOf(str).getClass());
System.out.println(Ifelse.ADD.getClass());
Ifelse.valueOf(str).checkType();
}
public void name(String str) {
String name = "ADD";
System.out.println("fffsssssss少时诵诗书说收缩sssssss");
}
}
运行结果
ADD
ADD
class app.Ifelse$1
class app.Ifelse$1
加法处理
枚举单例模式
转载:https://www.cnblogs.com/saoyou/p/11087462.html 无法反射详情解释
事实上,通过Java反射机制是能够实例化构造方法为private的类的。这也就是我们现在需要引入的枚举单例模式。
public class User {
private String username;
private String password;
}
public enum EnumSingleton {
INSTANCE;
private User user;
private EnumSingleton() {
user = new User();
user.setUsername("麦子");
user.setPassword("123");
}
public User getInstance() {
return user;
}
public static void main(String[] args) {
System.out.println(EnumSingleton.INSTANCE);
System.out.println(EnumSingleton.INSTANCE.getInstance());
User singleton1 = EnumSingleton.INSTANCE.getInstance();
User singleton2 = EnumSingleton.INSTANCE.getInstance();
System.out.println("正常情况下,实例化两个实例是否相同:" + (singleton1 == singleton2));
}
}
运行结果
INSTANCE
app.User@7852e922
正常情况下,实例化两个实例是否相同:true
Enum抽象类常见方法
Enum是所有 Java 语言枚举类型的公共基本类(注意Enum是抽象类),以下是它的常见方法:
返回类型 | 方法名称 | 方法说明 |
---|---|---|
int |
compareTo(E o) |
比较此枚举与指定对象的顺序 |
boolean |
equals(Object other) |
当指定对象等于此枚举常量时,返回 true。 |
Class<?> |
getDeclaringClass() |
返回与此枚举常量的枚举类型相对应的 Class 对象 |
String |
name() |
返回此枚举常量的名称,在其枚举声明中对其进行声明 |
int |
ordinal() |
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零) |
String |
toString() |
返回枚举常量的名称,它包含在声明中 |
static<T extends Enum<T>> T |
static valueOf(Class<T> enumType, String name) |
返回带指定名称的指定枚举类型的枚举常量。 |
总结
感觉他和其他的类在具体写法上没有什么具体的区别,只是他可以抵御反射攻击。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付