Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Não entendi o porquê do meu Elvis operator estar cinza

Minha dúvida já foi feita no fórum, porém não consegui entender o porquê de continuar cinza. Aparece a seguinte mensagem quando coloco o mouse sobre "it.complemento?.length":

Unnecessary safe call on a non-null receiver of type String Safe call on a non-null receiver will have nullable type in future releases Right now safe call on non nullable receiver has not null type: "hello"?.length has type Int In future releases all safe calls will have nullable type: "hello"?.length will have type Int?

E quando coloco o mouse sobre o Elvis operator:

Elvis operator (?:) always returns the left operand of non-nullable type Int

Código:

fun main() {
    val enderecoNulo: Endereco? = Endereco(cidade = "POA")
    val cidadeNova: String? = enderecoNulo?.cidade
    println(enderecoNulo?.cidade?.length)

    enderecoNulo?.let {
        println(it.cidade.length + 2)
        val tamanhoComplemento: Int = 
            it.complemento?.length ?: throw IllegalStateException("Complemento deve possuir um valor")
        println(tamanhoComplemento)
    }
}
1 resposta
solução!

Querido Juan, boa tarde!

Nessa caso isso acontece porque quando você chamou a variavel enderecoNulo você usou o "let" e o safe calls, então isso já irá verificar se a variável é nula e nem executa aquele trecho de codigo dentro do let. mas se você tirar o safe calls antes do let notara que pode acontecer de a variável ser nula

var endereco3: Endereco? = Endereco(logradouro = "rua vergueiro")
    endereco3.let {
        println(it?.logradouro?.length)
        val tamanhoComplemento: Int = it?.complemento?.length ?: throw IllegalStateException("Complemento não pode ser vazio")
        println(tamanhoComplemento)
    }