1
resposta

NullPointerException - Aula 3/Atividade 5

Quando tento rodar o código ele me retorna a exceção de NullPointerException nesta parte

val enderecoComComplemento = listOf(Endereco(complemento = "casa"),
    Endereco(),
    Endereco(complemento = "apartamento"))
    .filter { endereco -> endereco.complemento!!.isNotEmpty() }  //<----- NullPointerException
println(enderecoComComplemento)

O mesmo ocorre no neste bloco:

    listOf(Endereco(complemento = "casa"),
        Endereco(),
        Endereco(complemento = "apartamento"))
        .filter { endereco -> endereco.complemento!!.isNotEmpty() } //<---- NullPointerException
        .let(::println)

Como posso resolver essa exception?

1 resposta

Olá André, tudo bem?

A exceção de NullPointerException ocorre quando você está tentando acessar uma propriedade ou chamar um método em um objeto nulo. No seu código, o problema está na linha onde você utiliza o operador !! para acessar a propriedade complemento de um objeto Endereco.

A solução para evitar essa exceção é verificar se o objeto não é nulo antes de acessar sua propriedade. Você pode fazer isso utilizando o operador de chamada segura ?. em vez do operador !!. Dessa forma, se o objeto for nulo, a expressão será avaliada como nula e não ocorrerá a exceção.

Aqui está o código corrigido:

val enderecoComComplemento = listOf(
    Endereco(complemento = "casa"),
    Endereco(),
    Endereco(complemento = "apartamento")
).filter { endereco -> endereco.complemento?.isNotEmpty() == true }
println(enderecoComComplemento)

listOf(
    Endereco(complemento = "casa"),
    Endereco(),
    Endereco(complemento = "apartamento")
).filter { endereco -> endereco.complemento?.isNotEmpty() == true }
.let(::println)

Dessa forma, a expressão endereco.complemento?.isNotEmpty() irá retornar true se o objeto endereco não for nulo e a propriedade complemento não for vazia. Caso contrário, será retornado false e o objeto será filtrado da lista.

Espero ter ajudado e bons estudos!