java 獲取枚舉數項中的值,獲取枚舉列表,獲取枚舉項對象

 java中常用的枚舉方法有values和valueof

valueOf方法會把一個String類型的名稱轉變成枚舉項,也就是在枚舉項中查找字面值和該參數相等的枚舉項。

 values是獲取所有的枚舉項

package HtppClient1.EnumUtil;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.springframework.util.ReflectionUtils;

import com.sun.org.apache.bcel.internal.generic.IfInstruction;


enum TestEnums {
	weirenzheng(0, "0、未認證;", 16, -1, 0),
    onceTime(1, "上月支付1次及以下;", 8, 0, 1),
    towTimes(2, "上月支付1-2次", 12, 1, 2),
    threeTimes(3, "上月支付3-4次;", 16, 3, 4),
    fiveTimes(4, "上月支付5-7次", 20, 4, 7),
    sixTimes(5, "上月支付7次以上", 24, 7, Integer.MAX_VALUE);
    public int code;//排序
    public String desc;//描述
    public int score;//分值
    public int lower;//最低次數
    public int high;//最高次數

    TestEnums() {
    }

    TestEnums(int code, String desc, int score, int lower, int high) {
        this.code = code;
        this.desc = desc;
        this.score = score;
        this.lower = lower;
        this.high = high;
    }

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }



    public int getScore() {
        return score;
    }



    public int getLower() {
        return lower;
    }



    public int getHigh() {
        return high;
    }
    /**
     * 根據code返回枚舉值
     * @param Code
     * @return
     */
    public static TestEnums   getEumByCode(int Code){
    	for(TestEnums testEnums: TestEnums.values()) {
    		if(testEnums.getCode()==Code) {
    			return testEnums;
    		}
    	}
    	return null;  	
    }

    /**
     * 根據序號獲取枚舉數組中的值,序號必須從0開始
     * @param key
     * @return
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     * @throws InstantiationException
     */
    public static <T> List<T>   getEumByKey(int Code) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
    	List<String> enumList=getEumValueList();
    	List<T> enumList1=new ArrayList<T>();
    	for(TestEnums testEnums: TestEnums.values()) {
    		if(testEnums.getCode()==Code) {
    			Class<?> clazz=testEnums.getClass();
    			// 獲取所有常量
    	        Object object = clazz.getEnumConstants()[Code];
        	    Field[]  filedFields=clazz.getFields();    	            	        	
				for (Field field : filedFields) {   				
					field.setAccessible(true);
					Object sssObject=field.get(object);
					if(enumList.contains(field.getName())) {
						continue;
					}else {
						if(sssObject!=null)
							enumList1.add((T) sssObject);
					}
				}	
    			return enumList1;
    		}
    	}
    	return null;
    }
    /**
     * 獲取枚舉值常量列表
     * @param Code
     * @return
     */
    public static List<String>  getEumValueList() {
    		  List<String> list=new ArrayList<String>();
    		  for(Object object:TestEnums.values()) {
					list.add(object.toString());
    		  }
    		  return list;	
    }
    /**
     * 傳入方法名稱  values是值 ,field是 字段mingcheng
     * @param <T>
     * @param enumType
     * @param value
     * @param field
     * @return
     * @throws Exception
     */
    public static <T extends Enum<T>> T getEnumOnValue(Class<T> enumType, String value, String field) throws Exception {

       for (Object obj : enumType.getEnumConstants()) {
          Method m = obj.getClass().getDeclaredMethod("values", null);
          Object[] results = (Object[]) m.invoke(obj, null);
          for (Object result : results) {
             Field codeField = result.getClass().getDeclaredField(field);
             ReflectionUtils.makeAccessible(codeField);
             String fileValue = String.valueOf(ReflectionUtils.getField(codeField, result));
             if (fileValue.equals(value)) {
                return (T) result;
             }

          }
       }
       return null;
    }
}

test代碼:

import java.util.List;

/**
 * Hello world!
 *
 */
public class App 
{		 
    public static void main( String[] args ) throws Exception
    {
    	TestEnums testEnums = TestEnums.getEnumOnValue(TestEnums.class, "1", "code");
       List<Object> list=TestEnums.getEumByKey(1);
       for (Object string : list) {
		System.out.println(":"+string);
       }
    }
}

 

發佈了18 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章