【发布时间】:2021-01-05 10:15:10
【问题描述】:
我可以在 Ktor 1.4.X 中看到这一点,例如io.ktor.config.ApplicationConfig 被标记为@KtorExperimentalAPI,因此任何调用它的东西也需要标记为@KtorExperimentalAPI。
编辑添加:在 Ktor 1.5.0 中,io.ktor.config.ApplicationConfig 不再需要 @KtorExperimentalAPI,因此目前最好的解决方法是升级 Ktor 版本。
但这在本质上是传播的。如果我实现了一个实用函数,它需要一个应用程序配置参数,因此调用了实验性的Application.environment.config.property(path) API,这个实用函数也必须标记为@KtorExperimentalAPI。林斯,重复。很快,我的应用程序中的所有内容都被标记为 @KtorExperimentalAPI,因为在实现的某个地方(调用 API)* 调用了实验性 API。
有没有办法“封装不良”:调用实验性 API 并在那里做一些魔术,这样@KtorExperimentalAPI 就不会成为病毒并需要传播到应用程序的其余部分?
例如:
// I can accept that this perhaps
// needs to be marked @KtorExperimentalAPI
@KtorExperimentalAPI
fun Application.configProperty(path: String) : String {
return environment.config.property(path).getString()
}
// But I want to avoid that everything that calls it also
// needs to be marked @KtorExperimentalAPI
fun Application.getFoobarProperty() : String {
return "${configProperty("foo")}_${configProperty("bar")}";
}
【问题讨论】: