【问题标题】:How to create an object from yaml file declared as interface如何从声明为接口的 yaml 文件创建对象
【发布时间】:2019-04-16 14:31:54
【问题描述】:

我有一个类似的枚举

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。 这是我的问题,我如何知道在这种情况下它必须创建的对象类型?

【问题讨论】:

    标签: java spring-boot kotlin


    【解决方案1】:

    也许不是最好的选择,但它确实有效。

    我创建了一个新服务

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

    在我之前的服务中,我根据需要声明它

    private lateinit var apiDeclaration: APIInteface
    

    并调用 ApiFactory::getApi 方法来实现它

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      相关资源
      最近更新 更多