Как создать объект из файла yaml, объявленного как интерфейс - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть перечисление, подобное этому

enum class API : APIInteface {
    API_A{
        override processApi(toProcess: Any){
            return "A"
        }
    },
    API_B{
        override processApi(toProcess: Any){
            return "B"
        }
    };
    override abstract processApi(toProcess: Any)
}

И APIInteface только с одним методом processApi(toProcess: Any)

В моем сервисе я хочу объявить поле следующим образом:

@Value("\${api}")
private lateinit var apiDeclaration: APIInteface

И в моем config.yml у меня есть api: API_A

Я знаю, если тип apiDecaration API, он работает нормально, но мне нужно объявить его как APIInteface. Очевидно, это не сработало, потому что Failed to convert value of type 'java.lang.String' to required type. И вот мой вопрос: как я могу определить тип объекта, который он должен создать в этой ситуации?

1 Ответ

0 голосов
/ 16 апреля 2019

Возможно, это не лучший вариант, но он работает.

Я создал новый сервис

@Service
class APIFactory {
    @Value("\${geo.api}") 
    private lateinit var apiDeclaration: API

    fun getApi(){
        return apiDeclaration
    }
}

и в своем предыдущем сервисе я объявляю его как хочу

private lateinit var apiDeclaration: APIInteface

и вызовите метод ApiFactory :: getApi, чтобы опубликовать его

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