2014-10-04 3 views
2

У меня есть почти такая же функция и хотелось бы реорганизовать их в одном. Я думал использовать рефлексию, но я не понимаю, как инициализировать EnumMap с рефлексией. код функций, как это:Отражение с перечислениями

private void loadRealEstateValues() { 
    realEstateValues = new EnumMap<RealEstateType, String>(RealEstateType.class); 
    for (RealEstateType r : RealEstateType.values()) { 
     realEstateValues.put(r, ResUtils.getStringByName(context, 
       String.format("%s_%s", getParserPrefix(), r.toString().toLowerCase()))); 
    } 
} 

private void loadPeriodValues() { 
    periodValues = new EnumMap<PeriodType, String>(PeriodType.class); 
    for (PeriodType p : PeriodType.values()) { 
     periodValues.put(p, ResUtils.getStringByName(context, 
       String.format("%s_%s", getParserPrefix(), p.toString().toLowerCase()))); 
    } 
} 

способы поставить значения, которые я нашел, как это, Может быть, это лучше?

Class<?> c= TestEnum.class; 
    testEnumMap = new EnumMap<TestEnum, String>(TestEnum.class); 

    for(Object m : c.getEnumConstants()){ 
     testEnumMap.put((TestEnum) m, "bla bla blah"); 
    } 

ответ

2

Используйте общий метод:

private <T extends Enum<T>> EnumMap<T, String> loadEnumValues(Class<T> enumClass) { 
    EnumMap<T, String> map = new EnumMap<T, String>(enumClass); 
    for (T t : enumClass.getEnumConstants()) { 
     map.put(t, ResUtils.getStringByName(context, 
       String.format("%s_%s", getParserPrefix(), t.toString().toLowerCase()))); 
    } 
    return map; 
} 
Смежные вопросы