当前位置: 主页 > JAVA语言

java 枚举 大小写-枚举 java

发布时间:2023-05-02 22:03   浏览次数:次   作者:佚名

泛型

在定义类、接口或方法时使用一个占位符来表示某个数据类型,并在实例化时指定具体的数据类型。

泛型的引入使得程序设计更加灵活,可以更好地重用代码并提高代码的安全性和可读性。

如,定义一个泛型类:

public class MyList {
  private T[] data;
  public void add(T t) {
    // ...
  }
}

占位符T来表示某个数据类型,具体的数据类型由实例化对象时传入。

使用泛型

MyList lst = new MyList<>();
lst.add("hello");

泛型限定 枚举

枚举 java_java枚举实例_java 枚举 大小写

枚举(enum)全称为 enumeration, 是 JDK 1.5 中引入的新特性。 枚举是一种特殊类型的类,它定义了一组常量,这些常量可以作为一个独立的数据类型来使用。枚举在代码中可以替代使用硬编码的数字或字符串,使代码更加易读和可维护。Java中的枚举类型使用enum关键字进行定义。枚举中的每个常量都是该枚举类型的一个实例java 枚举 大小写,这些实例通常以大写字母形式命名。

例如:

enum Weekday {
    //默认添加 public static final
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
}

定义了一个枚举类型Weekday,其中包含了五个常量。我们可以通过以下方式来使用该枚举类型:

Weekday day = Weekday.MONDAY;
if (day == Weekday.MONDAY) {
    System.out.println("Today is Monday");
}

枚举类型还可以包含属性、构造函数和方法等成员,枚举常量之间用逗号隔开,最后一个常量后面也可以加逗号。总的来说,枚举让代码更加易读易写java 枚举 大小写,并且提高了代码的可维护性。在需要定义一组相关的常量时,可以优先考虑使用枚举类型。

枚举的特点

枚举相关方法

枚举 java_java 枚举 大小写_java枚举实例

方法名解释

Enum.valueOf(Class enumType, String name)

根据字符串找到该枚举类中的对象

public static void values()

获取该枚举类对象数组

public static void valueOf(String args0)

根据字符串获取该枚举类中的对象

public final String name()

枚举 java_java 枚举 大小写_java枚举实例

获取该枚举对象名字

public final Class getDeclaringClass()

获取枚举对象的枚举类型相对应的Class对象

public final int hashCode()

获取该枚举对象的hash值

public final int compareTo(E o)

两个枚举对象进行比较

public final boolean equals(Object other)

java枚举实例_枚举 java_java 枚举 大小写

比较两个枚举对象是否相同

枚举案例之状态机

enum Signal{RED, YELLOW, GREEN}
public class EnumTest {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入信号灯:RED,YELLOW,GREEN");
		Signal signal = Signal.valueOf(scan.next());
		String instruct = getTrafficInstruct(signal);
		System.out.println(instruct);
		
		scan.close();
	}
	public static String getTrafficInstruct(Signal signal) {
		String instruct = "信号灯故障";
		switch (signal) {
		case RED:
			instruct = "红灯停";
			break;
		case YELLOW:
			instruct = "黄灯请注意";
			break;
		case GREEN:
			instruct = "绿灯行";
			break;
		default:
			break;
		}
		return instruct;
	}
}

枚举案例之错误码

public enum ErrorCodeEn {
	
	Ok(1,"成功"),ERROR_A(2,"错误A"),ERROR_B(3,"错误B");
	
	private int code;//状态码
	private String description;//状态信息
	
	ErrorCodeEn(){}
	
	ErrorCodeEn(int code,String description){
		this.code = code;
		this.description = description;
	}
	public int getCode() {
		return code;
	}
	public String getDescription() {
		return description;
	}
}

枚举案例之组织枚举

含义:可以将类型相近的枚举通过接口或类组织起来(但是一般用接口方式进行组织)

原因是:

枚举 java_java 枚举 大小写_java枚举实例

public interface IErrorCode {
	enum LoginErrorCodeEn implements INumberEnum{
		OK(1,"登录成功"),ERROR_A(-1,"验证码错误"),ERROR_B(-2,"密码错误"),ERROR_C(-3,"用户已登录");
		private int code;
		private String description;
		LoginErrorCodeEn(int code,String description){
			this.code = code;
			this.description = description;
		}
		@Override
		public int getCode() {
			return code;
		}
		@Override
		public String getDescription() {
			return description;
		}
	}
	enum RigsterErrorCodeEn implements INumberEnum{
		OK(1,"注册成功"),ERROR_A(-1,"账号已存在");
		private int code;
		private String description;
		RigsterErrorCodeEn(int code,String description){
			this.code = code;
			this.description = description;
		}
		@Override
		public int getCode() {
			return code;
		}
		@Override
		public String getDescription() {
			return description;
		}
	}
}
interface INumberEnum {
	int getCode();
	String getDescription();
}

枚举案例之策略枚举

优点:这种枚举通过枚举嵌套枚举的方式,将枚举常量分类处理。

这种做法虽然没有switch语句简洁,但是更加安全、灵活

public enum Salary {
	JAVA(SalaryType.TEACHER),
    HTML(SalaryType.TEACHER),
    PYTHON(SalaryType.TEACHER),
	PRINCIPAL(SalaryType.ADMINISTRATION);//校长
	
	private final SalaryType salaryType;
	
	Salary(SalaryType salaryType){
		this.salaryType = salaryType;
	}
	
    //baseSalary-底薪 classHour-课时 teachingHourSubsidy-课时费 achievements-绩效
	double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements){
		return salaryType.getSalary(baseSalary, classHour, teachingHourSubsidy, achievements);
	}
	
	//策略枚举
	private enum SalaryType {
		
		TEACHER {//老师
			@Override
			double getSalary(double baseSalary, int classHour, double teachingHourSubsidy,
					double achievements) {
				return baseSalary + classHour*teachingHourSubsidy + achievements;
			}
		},
		ADMINISTRATION {//行政人员
			@Override
			double getSalary(double baseSalary, int classHour, double teachingHourSubsidy,
					double achievements) {
				return baseSalary + achievements;
			}
		};
		
		abstract double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements);
	}
}

枚举工具类--EnumSet 和 EnumMap

Java 中提供了两个方便操作enum的工具类——EnumSet 和 EnumMap。

虽然使用其它的 Map 实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用 EnumMap 会更加高效,因为它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以 EnumMap 使用数组来存放与枚举类型对应的值。这使得 EnumMap 的效率非常高

public class EnumTest {
	public static void main(String[] args) {
		
		//EnumSet的使用
        //把Signal枚举中所有对象抽取到Set集合中
		EnumSet signalSet = EnumSet.allOf(Signal.class);
		for (Enum en : signalSet) {
			System.out.println(en);
		}
		
		//EnumMap的使用
		EnumMap enumMap = new EnumMap<>(Signal.class);
		enumMap.put(Signal.RED, "红灯");
		enumMap.put(Signal.YELLOW, "黄灯");
		enumMap.put(Signal.GREEN, "绿灯");
        //把所有的映射关系对象抽取到Set集合中
		Set> entrySet = enumMap.entrySet();
		for (Entry entry : entrySet) {
			Signal key = entry.getKey();
			Object value = entry.getValue();
			System.out.println(key + " -- " + value);
		}
	}
}
enum Signal{RED, YELLOW, GREEN}