Estou escrevendo código Kotlin que usa uma biblioteca Java que usa Optional
s e prefiro usar o idioma anulável de Kotlin no mundo Kotlin.
Por exemplo, minha biblioteca pode ter uma função
Optional<Foo> getFoo(String fooId) {
...
}
e no meu programa Kotlin eu quero
foo: Foo? = /* something, something */ getFoo(fooId)
Eu sei que posso fazer algo como
lateinit var foo: Foo?
val fooOpt = getFoo(fooId)
if(fooOpt.isPresent) foo = fooOpt.get()
else foo = null
Mas, dado que o Java Optional
serve praticamente ao mesmo propósito que um anulável, isso parece desnecessariamente detalhado, mesmo se eu o recolher para
val foo: Foo? = getFoo(fooId).orElse(null)
Existe um método integrado para isso na biblioteca padrão Kotlin -
getOrNull
.Observe que se você usar
orElse(null)
, não deverá ligarget
primeiro.Sim, ao trabalhar com código Java que usa Opcional e deseja adaptá-lo para Kotlin, existem maneiras idiomáticas de lidar com a conversão entre tipos Opcionais e anuláveis em Kotlin.
Uma abordagem comum é usar o método orElse(null) em Opcional para convertê-lo em um tipo anulável em Kotlin. Aqui está um exemplo:
val opcionalValue: Opcional = // Algum valor opcional do código Java val nullableValue: String? = opcionalValue.ouElse(nulo)
Sim, ao trabalhar com código Java que usa Opcional e deseja adaptá-lo para Kotlin, existem maneiras idiomáticas de lidar com a conversão entre tipos Opcionais e anuláveis em Kotlin.
Uma abordagem comum é usar o método orElse(null) em Opcional para convertê-lo em um tipo anulável em Kotlin. Aqui está um exemplo:
kotlin Copiar código val opcionalValue: Opcional = // Algum valor opcional do código Java val nullableValue: String? = opcionalValue.orElse(null) Neste exemplo, se Opcional tiver um valor, ele será desembrulhado; caso contrário, null será atribuído a nullableValue. Esta abordagem é concisa e clara.
A partir do Kotlin 1.3, você também pode usar a função de extensão toNullable() fornecida pela biblioteca kotlin-stdlib-jdk8 para converter tipos Opcionais em tipos anuláveis:
importar kotlin.jvm.java como java
val opcionalValue: Opcional = // Algum valor opcional do código Java val nullableValue: String? = opcionalValue.toNullable()