1
resposta

Erro "Type mismatch: inferred type is 'MinhaClasseView' But 'MinhaClasse' was expected"

Voltei a ter o erro "Type mismatch: inferred type is 'MinhaClasseView' But 'MinhaClasse' was expected" no decorrer das aulas. Porém, agora, ao invés alterar o tipo da variável entre Long/String/Long, ele está falando para alterar a classe.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Mas acho que ao fazer isso, a persistência no Banco de dados vai dar problema, certo?

Vou enviar os códigos para ajudar.

Esse é o arquivo com o erro

@Component
class PilotoFormAtualizaMapper(
        private val _equipes: EquipeService,
        private val _categoria: CategoriaService
    ) : Mapper<PilotoFormAtualiza, Piloto> {
    override fun map(t: PilotoFormAtualiza): Piloto {
        return Piloto(
            imagemPiloto = t.imagemPiloto,
            cpfPiloto = t.cpfPiloto,
            nomePiloto = t.nomePiloto,
            sobrenomePiloto = t.sobrenomePiloto,
            emailPiloto = t.emailPiloto,
            senhaPiloto = t.senhaPiloto,
            administradorPiloto = t.administradorPiloto,
            codigoEquipePiloto = _equipes.listarUmaEquipe(t.codigoEquipePiloto),
            codigoCategoriaPiloto = _categoria.listarUmaCategoria(t.codigoCategoriaPiloto)
        )
    }
}

Class

@Entity
data class Piloto(
    val imagemPiloto: Image?,
    @Id
    val cpfPiloto: String,
    val nomePiloto: String,
    val sobrenomePiloto: String,
    val emailPiloto: String,
    val senhaPiloto: String,
    val administradorPiloto: Boolean,
    @OneToMany(mappedBy = "codigoEquipe")
    val codigoEquipePiloto: Equipe,
    @OneToMany(mappedBy = "codigoCategoria")
    val codigoCategoriaPiloto: Categoria,
    val createdAt: LocalDateTime = LocalDateTime.now(),
    val updatedAt: LocalDateTime = LocalDateTime.now()
)

Class Equipe

@Entity
data class Equipe(
    val imagemEquipe: Image?,
    val nomeEquipe: String,
    val siglaEquipe: String,
    @Id
    val codigoEquipe: String,
    val cidadeEquipe: String,
    val ufEquipe: String,
    val dataOrigemEquipe: LocalDate = LocalDate.now(),
    val createdAt: LocalDateTime = LocalDateTime.now(),
    val updatedAt: LocalDateTime = LocalDateTime.now()
)

Devo mandar mais algum para ajudar na identificação?

1 resposta

Olá Allan, tudo bem?

Pelo que entendi, você está tendo um erro de tipo na classe PilotoFormAtualizaMapper, correto? O erro ocorre porque você está tentando passar um objeto do tipo MinhaClasseView para um método que espera um objeto do tipo MinhaClasse.

Para resolver esse problema, você precisa fazer a conversão do objeto MinhaClasseView para MinhaClasse antes de passá-lo para o método. Você pode fazer isso criando um método que recebe um objeto MinhaClasseView e retorna um objeto MinhaClasse com os mesmos valores.

Por exemplo, na classe PilotoFormAtualizaMapper, você pode criar um método como esse:

private fun toMinhaClasse(minhaClasseView: MinhaClasseView): MinhaClasse {
    return MinhaClasse(
        minhaPropriedade = minhaClasseView.minhaPropriedade,
        outraPropriedade = minhaClasseView.outraPropriedade
    )
}

E então, na hora de passar o objeto para o método, você faz a conversão antes:

override fun map(t: PilotoFormAtualiza): Piloto {
    return Piloto(
        imagemPiloto = t.imagemPiloto,
        cpfPiloto = t.cpfPiloto,
        nomePiloto = t.nomePiloto,
        sobrenomePiloto = t.sobrenomePiloto,
        emailPiloto = t.emailPiloto,
        senhaPiloto = t.senhaPiloto,
        administradorPiloto = t.administradorPiloto,
        codigoEquipePiloto = _equipes.listarUmaEquipe(toMinhaClasse(t.codigoEquipePiloto)),
        codigoCategoriaPiloto = _categoria.listarUmaCategoria(toMinhaClasse(t.codigoCategoriaPiloto))
    )
}

Dessa forma, você consegue fazer a conversão de forma segura e evitar erros de tipo.

Espero ter ajudado e bons estudos!