1
resposta

Type mismatch. Required:String Found:String?

Boa noite, pessoal!

Tenho minha classe:

package br.com.alura.alugames.dados

import br.com.alura.alugames.modelo.Gamer
import br.com.alura.alugames.utilitario.toEntity
import br.com.alura.alugames.utilitario.toModel
import javax.persistence.EntityManager


class GamersDAO(manager: EntityManager) : DAO<Gamer, GamerEntity>(manager, GamerEntity::class.java) {

    override fun toEntity(objeto: Gamer): GamerEntity {
        return GamerEntity(objeto.id, objeto.nome, objeto.email, objeto.dataNascimento, objeto.usuario, objeto.plano.toEntity())
    }

    override fun toModel(entity: GamerEntity): Gamer {
        return Gamer(entity.nome, entity.email, entity.dataNascimento, entity.usuario, entity.id).apply { plano = entity.plano.toModel() }
    }
}

e:

package br.com.alura.alugames.dados

import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
import javax.persistence.ManyToOne
import javax.persistence.Table

@Entity
@Table(name = "gamers")
class GamerEntity(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int = 0,
    val nome: String = "Nome do Gamer",
    val email: String = "email@email.com",
    val dataNascimento:String? = null,
    val usuario:String? = null,
    @ManyToOne
    val plano: PlanoEntity = PlanoAvulsoEntity()) {
}

só que na classe GamersDAO, está acontecendo o seguinte erro nessa linha:

return Gamer(entity.nome, entity.email, entity.dataNascimento, entity.usuario, entity.id)

Type mismatch. Required:String Found:String?

mas o código está igual dos professores.

Pesquisei um pouco sobre o assunto e fala que o Kotlin trata String e String?(possibilidade de ser nulo) de formas diferentes, mas o que não entendi é que o código está igual do repositório. Será que o código do repositório do curso está com erro ou é algo aqui? Alguém poderia ver isso pra mim, por favor?

1 resposta

Olá, estudante. Tudo bem?

No seu caso, o erro está ocorrendo porque o construtor da classe Gamer está esperando um String, mas você está passando um String? para os parâmetros dataNascimento e usuario. Para resolver isso, você pode fornecer um valor padrão para esses campos quando eles forem nulos ou garantir que eles nunca sejam nulos antes de passá-los para o construtor.

Aqui está uma maneira de resolver o problema usando o operador Elvis (?:), que permite fornecer um valor padrão caso a variável seja nula:

return Gamer(
    entity.nome, 
    entity.email, 
    entity.dataNascimento ?: "Data de nascimento padrão", 
    entity.usuario ?: "Usuário padrão", 
    entity.id
).apply { plano = entity.plano.toModel() }

Nesse exemplo, se entity.dataNascimento ou entity.usuario forem nulos, eles serão substituídos por um valor padrão ("Data de nascimento padrão" e "Usuário padrão", respectivamente). Você pode ajustar esses valores padrão conforme necessário para o seu contexto. Vale tentar.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!