Estou convertendo Java para Kotlin com o Android Studio. Eu recebo double bang após a variável de instância. Qual é o estrondo duplo e, mais importante, onde isso está documentado?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
kotlin
kotlin-null-safety
mbr_at_ml
fonte
fonte
!!
está no final de uma declaração? A conversão automática de IJ para Kotlin fez isso por mimval price = sale.latest!!
sale.latest
pode conternull
; a atribuição será bem-sucedida somente sesale.latest
não for nula e lançará o NPE caso contrário. Isso fornece segurança nula paraval price
: seu tipo será não nulo. Veja kotlinlang.org/docs/reference/null-safety.html!!
você pode executar uma falha rápida e localizar a causa raiz de um NPE. Eu gostaria que o Java tivesse um recurso semelhante (ou seja, semif
declarações e / ouassert
íons feios ).Aqui está um exemplo para tornar as coisas mais claras. Digamos que você tenha essa função
Isso produzirá o seguinte erro de compilação.
Agora você pode impedir isso adicionando um ponto de interrogação ao
String
tipo para torná-lo anulável.Então nós temos
Isso produz um resultado de
null
Agora, se queremos que a função gere uma exceção quando o valor do email for nulo, podemos adicionar duas exclamações no final do email. Como isso
Isso lançará um
KotlinNullPointerException
fonte
O operador de golpe duplo é uma excelente opção para os fãs de
NullPointerException
(ou NPE, para abreviar).Portanto, você pode escrever
a!!
e isso retornará um valor não nulo dea
(umString
aqui por exemplo) ou lançará um NPE sea
for nulo.Se você deseja um NPE, pode obtê-lo, mas precisa solicitá-lo explicitamente. Esse operador deve ser usado nos casos em que o desenvolvedor está garantindo - o valor nunca será nulo .
fonte