我有4个几乎相同的功能,并希望将它们重构为一个。我本来想使用反射,但是我不明白如何使用反射来初始化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");
    }

最佳答案

使用通用方法:

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

关于java - 用枚举思考,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26191865/

10-10 12:35