#java #kotlin
#java #kotlin
Вопрос:
Я пишу следующий код Kotlin, но при компиляции он выдает ошибку
Null can not be a value of a non-null type ByteArray
это мой код
fun myKafkaProducer(): MessageBusProducer<UUID?, Any>? {
return if (serverProperties().isWAPKafkaSet) {
val uuidSerializer = UUIDSerializer()
val uuidDeserializer = UUIDDeserializer()
val topic = serverProperties().hmsTopic
val serializer = KafkaProperties.Serializers(Function<UUID, ByteArray> { uuid: UUID? -> uuidSerializer.serialize(null, uuid) }, label@ Function<Any, ByteArray> { sapMessage: Any ->
try {
return@label ObjectMappers.getObjectMapper().writeValueAsString(sapMessage).toByteArray()
} catch (e: JsonProcessingException) {
e.printStackTrace()
}
null /*showing error here */
}, null,
null
)
// set WapKafkaHostPortAddress in env (configuration repo)
return KafkaMessageBusProducerFactory.Builder<UUID, Any>()
.kafkaAddressPropertyName("portAddress")
.topic(topic)
.messageBusTypeSerializers(serializer)
.build().create(true)
} else {
return null
}
}
Я пытаюсь закодировать эквивалент Serializers<UUID, Object>
какой другой тип данных я могу использовать?
Ответ №1:
Эквивалентом Object
в Kotlin является тип Any?
. Только тогда вы сможете вернуть null, потому что тип Any
не обнуляемый и Any?
может быть нулевым.