java - 用枚举进行反射(reflection)

标签 java reflection

我有 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 - 用枚举进行反射(reflection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191865/

相关文章:

java - 用另一个字符串拆分一个字符串

java - 编译 Play 2.x - Java 应用程序超时(15 分钟)| Heroku 和 Play 框架

java - Spring 数据保存与 saveAll 性能

.net - 如何循环遍历一个类的所有属性?

java - 如何使用额外的 mockito 参数测试参数化单元测试用例?

java - 基于两个参数的二维数组排序

c# - 当属性是委托(delegate)类型时,如何在 C# 中使用反射设置属性值?

c# - 跨不同程序集版本传递类对象

java - Caused by : java. lang.ClassCastException : java. lang.Class无法转换为java.lang.reflect.ParameterizedType