首页 > 解决方案 > 使用反射根据接收到的参数访问属性 - Java

问题描述

我正在 Spring 中开发一个项目,并且我有一个将区域映射到站点的配置文件,例如:

===========
Areas Mapper
===========

Sites:
    USA:
        - Arizona
        - Florida
        - New York
        - Texas
    Europe:
        - Germany
        - Russia
        - Poland

现在,我从 API 调用中获取区域作为参数,并且我需要根据此参数返回站点列表。

我想知道,如果在这种情况下使用反射来动态访问站点列表是正确的方法吗?如果是这样,你会怎么做?

这是我到目前为止所做的:

配置类:

@ConfigurationProperties(prefix = "Sites")
@Component
@Data
public class AreasToSitesMapperConfig {

    protected List<String> usa;
    protected List<String> europe;
    protected List<String> australia;
}

映射器类:

@Component
public class AreasToSitesMapper {

    @Inject
    private AreasToSitesMapperConfig areasToSitesMapperConfig;

    public List<String> getSitesForArea(String area) throws NoSuchFieldException {
        Field field = AreasToSitesMapperConfig.class.getDeclaredField(area);
        field.setAccessible(true);
        return field.get(this);

        //Of course I can implement it as follows, but I'm not sure this is the right way to do it :  
        if (area == "USA") return areasToSitesMapperConfig.usa ......
    }
}

这是来自服务的调用:

List<AreaDataDAO> areaDataList = areasRepository.getDataBySiteInAndDateBetweenOrderByDateDesc(
            areasToSitesMapper.getSitesForArea(area),     
        );

如您所见,'area' 被传递给 'getSitesForArea' 函数,并且基于此参数我需要返回相关列表。

标签: javaspringoopreflection

解决方案


推荐阅读