枚举:
枚举这种类型占用内存空间大,根据需要选择枚举或者常量
每一个枚举元素都是一个对象
基本使用
class ColorTest{
//如果使用枚举,不需要再本类中定义...即使定义了,也用不到
// private int red;
// private int blue;
// private int black;
// private int color;
private Color colorenum;
// public void test(){
// color = red;
// color = 1;
// }
//从编码的角度(编译期),限制了colorenum的选择范围;
public void test2(){
//如果希望color强制只能为red,blue,black中的一种;不能是color = 1;
colorenum = Color.red;
//colorenum = 1; 此时会报错,编辑期不给通过
System.out.println(colorenum); //red
System.out.println(colorenum.name()); //red
System.out.println(colorenum.ordinal()); //2,枚举的序号;
System.out.println(colorenum.toString());//red
for (Color s:Color.values()) {
System.out.println(s);
}
}
public void test3(){
//存放枚举的集合
EnumSet colors = EnumSet.allOf(Color.class);
for (Color c:colors){
System.out.println(c);
}
}
public void test4() {
EnumMap map = new EnumMap(Color.class);
map.put(Color.red,"111");
map.put(Color.blue,"222");
for (Color c:map.keySet()){
System.out.println(c);
}
}
}
枚举构造方法
public class Demo{
public static void main(String[] args) {
ColorTest colorTest = new ColorTest();
colorTest.test();
}
}
enum Color {
blue,black(10),red;
//可以定义属性
private int color;
//只能定义私有的构造方法
private Color(){
System.out.println("无参构造器");
}
private Color(int color){
this.color = color;
System.out.println("有参构造器");
}
}
class ColorTest{
private Color colorenum;
public void test(){
//用到枚举类型Color,所有的构造方法都会被调用
colorenum = Color.red;
}
}
让枚举实现接口
Color.red 是一个对象,对象可以调用方法;
public class Demo{
public static void main(String[] args) {
ColorTest colorTest = new ColorTest();
colorTest.test();
}
}
interface info{
int getColor();
}
enum Color implements info{
blue,black(10),red;
//可以定义属性
private int color;
//只能定义私有的构造方法
private Color(){
System.out.println("无参构造器");
}
private Color(int color){
this.color = color;
System.out.println("有参构造器");
}
@Override
public int getColor() {
return this.color;
}
}
class ColorTest{
private Color colorenum;
public void test(){
int num = Color.red.getColor();
System.out.println(num);
int num2 = Color.black.getColor();
System.out.println(num2);
}
}
再枚举中定义抽象方法
public class Demo{
public static void main(String[] args) {
ColorTest colorTest = new ColorTest();
colorTest.test();
}
}
enum Color {
blue {
@Override
public String getColorName() {
return "blue";
}
},black() {
@Override
public String getColorName() {
return "black";
}
},red {
@Override
public String getColorName() {
return "red";
}
};
public abstract String getColorName();
}
class ColorTest{
public void test(){
String name = Color.red.getColorName();
System.out.println(name);
}
}
枚举实现单例模式
默认 public static final来修饰枚举
public class Demo{
public static void main(String[] args) {
//通过SINGLETON对象调用method方法;
EnumSingleton instance = EnumSingleton.INSTANCE.getInstance();
EnumSingleton instance1 = EnumSingleton.INSTANCE.getInstance();
System.out.println(instance==instance1);
}
}
enum EnumSingleton {
INSTANCE;
public EnumSingleton getInstance(){
return INSTANCE;
}
}
枚举用途
public interface ResultCode {
//操作是否成功,true为成功,false操作失败
boolean success();
//操作代码
int code();
//提示信息
String message();
}
@ToString
public enum CommonCode implements ResultCode{
SUCCESS(true,10000,"操作成功!"),
FAIL(false,11111,"操作失败!"),
UNAUTHENTICATED(false,10001,"此操作需要登陆系统!"),
UNAUTHORISE(false,10002,"权限不足,无权操作!"),
SERVER_ERROR(false,99999,"抱歉,系统繁忙,请稍后重试!");
//private static ImmutableMap codes ;
//操作是否成功
boolean success;
//操作代码
int code;
//提示信息
String message;
private CommonCode(boolean success,int code, String message){
this.success = success;
this.code = code;
this.message = message;
}
@Override
public boolean success() {
return success;
}
@Override
public int code() {
return code;
}
@Override
public String message() {
return message;
}
}
获取所有的枚举对象
enum HandlerBeanEnum {
//给Name赋值
AHandler("a"),
BHandler("b"),
CHandler("c");
private String Name;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
private HandlerBeanEnum(String beanName) {
this.Name = beanName;
}
private HandlerBeanEnum() {
}
}
public class demo {
@Test
public void a(){
//获取所有的枚举对象
HandlerBeanEnum[] values = HandlerBeanEnum.values();
for (HandlerBeanEnum value : values) {
String aString = value.getName();
System.out.print(aString);
}
}
}
枚举优点?
可以避免反射攻击