O que significa o ponto de exclamação em Kotlin e como se livrar dele?
Olá a todos! Comecei a estudar Kotlin depois de Java e me deparei com uma construção estranha. No código de outra pessoa, vi que após o tipo de uma variável há um ponto de exclamação, por exemplo:
```kotlin
val name: String! = someJavaMethod()
```
Tentei entender o que isso significa, mas não encontrei nada na documentação. Quando escrevo esse código no meu projeto, o compilador dá o erro "This type has a constructor". E se eu uso isso no tipo de retorno de uma função, o IDEA sublinha em vermelho.
Além disso, nos logs vejo que às vezes a variável pode ser null, e às vezes não. Tentei usar `String?` — aí o compilador reclama que não consigo fazer "unpack". E se uso `String` — ele dá um aviso sobre possível NPE.
Por favor, me expliquem:
1. O que é `String!` e por que essa sintaxe existe?
2. Como lidar corretamente com esses tipos?
3. Existe uma maneira de se livrar desse ponto de exclamação?
Aqui está um exemplo de código que me confunde:
```kotlin
// Java-