Проблема с универсальными шаблонами для функции расширения до Reactor Mono в Kotlin - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь создать интерфейс DTO, в котором есть метод преобразования dto обратно в его исходную модель. Теперь я хотел создать функцию расширения для класса Mono, чтобы обеспечить лучшую читаемость. Но я не могу заставить его работать, может ли кто-нибудь быть таким добрым и помочь мне.

class StringDTO(private val s: String) : DTO<String> {
    override fun fromModel(model: String): DTO<String> {
        TODO("Not yet implemented")
    }

    override fun toModel(): String {
        return s
    }
}

val s = Mono.just("asd")
    .map { StringDTO(it) }
    .toModel<String>()
    .block()

println("s = ${s}")

fun <T> Mono<DTO<T>>.toModel(): Mono<T> {
    return this.map(DTO<T>::toModel)
}

1 Ответ

1 голос
/ 07 мая 2020

Объявление параметра типа Mono с модификатором out в функции расширения решает проблему:

fun <T> Mono<out DTO<T>>.toModel(): Mono<T> {
    return this.map(DTO<T>::toModel)
}

...