Abbath
Abbath

Reputation: 1012

Reflection with Enums

I have 4 almost same function and would like to refactor them in one. I thought to use reflexy, but I don't understand how to init EnumMap with reflexy. code of functions like this:

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

ways to put values I found like this, Maybe is a better?

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

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

Upvotes: 2

Views: 144

Answers (1)

JB Nizet
JB Nizet

Reputation: 691655

Use a generic method:

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

Upvotes: 2

Related Questions