java 枚举 大小写-枚举 java
在定义类、接口或方法时使用一个占位符来表示某个数据类型,并在实例化时指定具体的数据类型。
泛型的引入使得程序设计更加灵活,可以更好地重用代码并提高代码的安全性和可读性。
如,定义一个泛型类:
public class MyList {
private T[] data;
public void add(T t) {
// ...
}
}
占位符T来表示某个数据类型,具体的数据类型由实例化对象时传入。
使用泛型
MyList lst = new MyList<>();
lst.add("hello");
泛型限定 枚举
枚举(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 枚举 大小写,并且提高了代码的可维护性。在需要定义一组相关的常量时,可以优先考虑使用枚举类型。
枚举的特点
枚举相关方法
方法名解释
Enum.valueOf(Class enumType, String name)
根据字符串找到该枚举类中的对象
public static void values()
获取该枚举类对象数组
public static void valueOf(String args0)
根据字符串获取该枚举类中的对象
public final String name()
获取该枚举对象名字
public final Class getDeclaringClass()
获取枚举对象的枚举类型相对应的Class对象
public final int hashCode()
获取该枚举对象的hash值
public final int compareTo(E o)
两个枚举对象进行比较
public final boolean equals(Object other)
比较两个枚举对象是否相同
枚举案例之状态机
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;
}
}
枚举案例之组织枚举
含义:可以将类型相近的枚举通过接口或类组织起来(但是一般用接口方式进行组织)
原因是:
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}