Использовать отражение для доступа к свойству на основе полученного параметра - Java - PullRequest
2 голосов
/ 07 апреля 2019

Я разрабатываю проект в 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', и на основе этого параметра мне нужно вернуть соответствующий список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...