Spring WebFlux Несоответствие типов с Kotlin toMono () - PullRequest
0 голосов
/ 29 апреля 2020

Я получаю следующее предупреждение о компиляции:

Type mismatch.
Required: Any
Found: Customer?

при попытке вызвать метод toMono() для экземпляра Customer, допускающего обнуление:

@Service
class CustomerServiceImpl @Autowired constructor(
        val customers: ConcurrentHashMap<Int, Customer>
) : CustomerService {
    override fun getCustomer(id: Int): Mono<Customer?> {
        return customers[id].toMono()
    }
}

CustomerService :

interface CustomerService {
    fun getCustomer(id: Int): Mono<Customer?>
}

AppConfig:

@Configuration
class AppConfiguration {
    companion object {
        val initialCustomers: Array<Customer> = arrayOf(
                Customer(1, "Jerry"),
                Customer(2, "James"),
                Customer(3, "John")
        )
    }

    @Bean
    fun createCustomers() = ConcurrentHashMap<Int, Customer>(
            initialCustomers.associateBy(Customer::id)
    )
}

Нет такого предупреждения компиляции, когда я определяю тип возврата в интерфейсе CustomerService как не -null Customer экземпляр (: Mono<Customer>). Что мне здесь не хватает? Любая помощь будет принята с благодарностью. Пожалуйста, дайте мне знать, если я должен приложить что-нибудь еще. Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Похоже, что Mono.justOrEmpty() это то, что я искал здесь, к вашему сведению. Это, кажется, решает проблему с обнуляемыми объектами.

0 голосов
/ 30 апреля 2020

Расширение toMono(), которое вы, похоже, используете, определяется следующим образом:

fun <T : Any> T.toMono(): Mono<T> = Mono.just(this)

Поскольку T : Any, получатель не должен быть обнуляемым.

Я полагаю, вы ' Мне нужно расширение как это:

fun <T : Any?> T.toMono(): Mono<T> = Mono.justOrEmpty(this)

Отказ от ответственности : я даже не проверял, компилируется ли это.

...