2014-10-04 115 views
2

我有4个几乎相同的功能,并希望在一个重构它们。我以为使用reflexy,但我不明白如何启动EnumMap与reflexy。 代码的功能是这样的:反射与枚举

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; 
}