讲真,java的枚举类提供的方法太少了,Enum只有两个valueOf可以搞,如果碰上需要传入枚举类型的值,获取枚举类对象或者枚举类型名称的时候,只能干瞪眼,或者循环比对。最近项目就遇到这种,而且感觉以后以及别人都不会少遇到,所以就写了个帮助类,希望以后能用上吧。这个帮助类是基于以下枚举类的类型提供的:
public enum DeleteStatusEnum { /** * 值为0(就是NOT_DELETE)是数据库默认值,未删除; * 值为1(就是HAS_DELETE)是已经被逻辑删除了 */ NOT_DELETE("未删除","0"), HAS_DELETE("已删除","1"); private String typeName; private String typeCode; private DeleteStatusEnum(String typeName,String typeCode){ this.typeName = typeName; this.typeCode = typeCode; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } public String getTypeCode() { return typeCode; } public void setTypeCode(String typeCode) { this.typeCode = typeCode; } }
帮助类的内容:
package com.hikvision.util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 此帮助类严格限定为有typeName和typeCode的枚举类,如定义枚举类型为 ADMIN(typeName,typeCode)这种 * * ClassName: EnumOperatorUtil.java * Copyright xiehao * Function: TODO ADD FUNCTION. * Reason: TODO ADD REASON. * Date: 2017年2月28日 * @author xiehao * @version V1.0 * @since JDK 1.8 * @see */ public class EnumHelperUtil{ /** * indexOf,传入的参数ordinal指的是需要的枚举值在设定的枚举类中的顺序,以0开始 * T * @param clazz * @param ordinal * @return * @author xiehao */ public static <T extends Enum<T>> T indexOf(Class<T> clazz, int ordinal){ return (T) clazz.getEnumConstants()[ordinal]; } /** * nameOf,传入的参数name指的是枚举值的名称,一般是大写加下划线的 * T * @param clazz * @param name * @return Enum T * @author xiehao */ public static <T extends Enum<T>> T nameOf(Class<T> clazz, String name){ return (T) Enum.valueOf(clazz, name); } /** * 使用枚举类型对应的typeCode获取枚举类型 * T * @param clazz 枚举类的class * @param getTypeCodeMethodName 传入的typeCode的get方法 * @param typeCode 传入的typeCode值,这个方法为String类型 * @return * @author xiehao */ public static <T extends Enum<T>> T getByStringTypeCode(Class<T> clazz,String getTypeCodeMethodName, String typeCode){ T result = null; try{ T[] arr = clazz.getEnumConstants(); Method targetMethod = clazz.getDeclaredMethod(getTypeCodeMethodName); String typeCodeVal = null; for(T entity:arr){ typeCodeVal = targetMethod.invoke(entity).toString(); if(typeCodeVal.contentEquals(typeCode)){ result = entity; break; } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } return result; } /** * 使用枚举类型对应的typeCode获取枚举类型 * T * @param clazz 枚举类的class * @param getTypeCodeMethodName 传入的typeCode的get方法 * @param typeCode 传入的typeCode值,这个方法为Integer类型 * @return * @author xiehao */ public static <T extends Enum<T>> T getByIntegerTypeCode(Class<T> clazz,String getTypeCodeMethodName, Integer typeCode){ T result = null; try{ T[] arr = clazz.getEnumConstants(); Method targetMethod = clazz.getDeclaredMethod(getTypeCodeMethodName); Integer typeCodeVal = null; for(T entity:arr){ typeCodeVal = Integer.valueOf(targetMethod.invoke(entity).toString()); if(typeCodeVal.equals(typeCode)){ result = entity; break; } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } return result; } /** * 使用枚举类型对应的typeName获取枚举类型 * T * @param clazz 枚举类的class * @param getTypeNameMethodName 传入的typeName的get方法 * @param typeName 传入的typeName值,这个方法为String类型 * @return * @author xiehao */ public static <T extends Enum<T>> T getByStringTypeName(Class<T> clazz,String getTypeNameMethodName, String typeName){ T result = null; try{ T[] arr = clazz.getEnumConstants(); Method targetMethod = clazz.getDeclaredMethod(getTypeNameMethodName); String typeNameVal = null; for(T entity:arr){ typeNameVal = targetMethod.invoke(entity).toString(); if(typeNameVal.contentEquals(typeName)){ result = entity; break; } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } return result; } }
以上内容其实还可以再精简优化,时间有限,就先记录下来吧
相关推荐
这些代码可能包括创建枚举类,然后通过反射获取枚举值、实例名以及演示如何使用`getDeclaredConstructor()`和`newInstance()`方法来访问私有构造函数(虽然这不是常规用法)。 通过深入理解这些概念,你可以更好地...
在枚举内部,可以通过`Enum<E extends Enum<E>>`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...
可以通过`values()`方法获取枚举类型的所有实例,然后进行遍历: ```java for (WeekDay day : WeekDay.values()) { System.out.println(day + "====>" + day.getDay()); } ``` 这将打印出所有枚举实例及其...
Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方 enum Season { SPRING, SUMMER, AUTUMN, WINTER } 定义了一个季节枚举类型。 在本例中,对于Season.SPRING这个...
包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。
在Java编程语言中,`Enum`(枚举)是一种特殊的类类型,用于定义固定的、预定义的常量集合。它们在程序设计中扮演着重要的角色,特别是在需要表示一组固定值时,如状态、颜色、星期等。本资源包提供了一些关于`Enum`...
Java枚举(enum)是Java语言提供的一种特殊的数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中是类的子类型,因此,它们具备类的一些特性,比如可以有方法、变量以及实现接口。...
4. **`valueOf()`**:根据枚举元素的名称获取枚举对象实例。 ##### 3.1 枚举遍历示例 下面是一个简单的枚举遍历示例: ```java public static void testTraversalEnum() { Light[] allLight = Light.values(); ...
在Spring Boot的配置或服务中,枚举还可以用来实现更复杂的逻辑,例如通过枚举值进行条件判断、映射到其他数据结构等。 在实际项目中,`pom.xml`文件包含了项目依赖管理,确保你引入了Spring Boot的启动器和其他...
Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...
- **增强可读性**:通过`name()`方法获取枚举元素的名称,使得代码更具可读性,便于维护。 **4. 设计哲学** 枚举不仅是Java语法的一部分,更是一种设计理念的体现。它鼓励开发者在设计程序时,明确区分不同类型的...
在Java编程语言中,`enum`(枚举)是一种特殊的类,用于定义一组固定的常量。枚举在很多场景下非常有用,例如表示状态、颜色、星期等有限且不变的集合。下面我们将深入探讨`enum`枚举类的使用方法,并通过具体的代码...
解析字符串转化为对象+code转desc+通过值实例枚举类+EnumUtil+PackageUtils工具类 ZipInputStream实现压缩文件的读取与数据转化的过程,利用反射实现根据枚举值获取枚举对象。
Java枚举类型(enum)是Java语言中一种特殊的类,用于定义一组固定的常量。它在许多场景下作为替代常量或单例模式的选择,提供了更安全、更易读的代码。下面我们将深入探讨Java枚举类的用法及其优势。 1. **枚举的...
枚举可以方便地进行遍历,常通过`values()`方法获取枚举值的数组: ```java for (Color color : Color.values()) { System.out.println(color); } ``` 同时,枚举常量也可以用于`switch`语句,提供了一种更...
可以通过 `values()` 方法获取枚举类型的全部枚举常量,返回一个枚举类型的数组。 总结来说,Java 枚举提供了一种强类型、安全且易于使用的机制,用于表示一组固定数量的值。它简化了代码,提高了程序的可读性和可...
枚举是面向对象编程中的一种数据类型,它允许我们定义一组有限的常量,这些常量代表了特定的值。在这个上下文中,这个枚举类可能是用来存储每个民族的名称、代码或者其他相关信息,便于在程序中进行处理和操作。 ...
Java枚举类型是Java语言中的一种特殊的类,用于定义一组固定的常量集合。它在Java中扮演着重要的角色,提供了一种安全、类型化的常量表示方式,比传统的final static变量更具有优势。理解Java枚举类型对于编写高质量...
在Java编程语言中,`enum`(枚举)是一种特殊的类,用于定义一组固定的常量。这个特性在很多场合下非常有用,比如表示状态、角色、颜色等有限且不变的集合。本文将深入探讨Java `enum`的用法,包括其基本概念、创建...
本篇将详细介绍如何利用枚举(enum)来实现单例模式,并结合`Properties`类解析配置文件。 首先,我们来看一下传统的单例模式实现方式,如懒汉式和饿汉式,但这些方法在多线程环境下可能会存在问题。而使用枚举实现...