Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] Uso de annotations

Tengo una duda respecto a la annotations, en el video se explica que se utilizan para evitar problemas de coincidencia con los nombres, pero ya aplicamos un método de json para obtener el uppercammelcase, osea que ya aqui las annotations serian redundantes?

package com.alura.screenmatch.modelos;

import com.google.gson.annotations.SerializedName;

public class Titulo implements Comparable<Titulo>{
    // @SerializedName("Title")
    private String nombre;
    // @SerializedName("Year")
    private int fechaDeLanzamiento;
    private boolean incluidoEnElPlan;
    private double sumaDeLasEvaluaciones;
    private int totalDeEvaluaciones;
    // @SerializedName("Runtime")
    private int duracionEnMinutos;

    public Titulo(String nombre, int fechaDeLanzamiento) {
        this.nombre = nombre;
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public Titulo(TituloOmdb miTituloOMDB) {
        this.nombre = miTituloOMDB.title();
        this.fechaDeLanzamiento = Integer.parseInt(miTituloOMDB.year());
        this.duracionEnMinutos = Integer.parseInt(miTituloOMDB.runtime().substring(0, 2));
    }

    public String getNombre() {
        return nombre;
    }

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }

    public boolean isIncluidoEnElPlan() {
        return incluidoEnElPlan;
    }

    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public int getTotalDeEvaluaciones() {
        return totalDeEvaluaciones;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public void setIncluidoEnElPlan(boolean incluidoEnElPlan) {
        this.incluidoEnElPlan = incluidoEnElPlan;
    }

    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }

    public void muestraFichaTecnica(){
        System.out.println("Nombre de la película: " + nombre);
        System.out.println("Año de lanzamiento: " + fechaDeLanzamiento);
    }

    public void evalua(double nota){
        sumaDeLasEvaluaciones += nota;
        totalDeEvaluaciones++;
    }

    public double calculaMediaEvaluaciones(){
        return sumaDeLasEvaluaciones / totalDeEvaluaciones;
    }

    @Override
    public int compareTo(Titulo otroTitulo) {
        return this.getNombre().compareTo(otroTitulo.getNombre());
    }

    @Override
    public String toString() {
        return "Titulo{" +
                "nombre='" + nombre + '\'' +
                ", fechaDeLanzamiento=" + fechaDeLanzamiento +
                ", duracionEnMinutos=" + duracionEnMinutos +
                '}';
    }
}
1 respuesta
solución!

Hola Enmanuel, espero que estés bien

¡Qué bueno que estás profundizando en el uso de anotaciones en Java! Las anotaciones como @SerializedName son muy útiles cuando trabajamos con bibliotecas de serialización/deserialización como Gson. Te explico un poco más sobre tu duda:

Cuando usas @SerializedName, estás especificando explícitamente el nombre del campo en el JSON que corresponde a un campo de tu clase. Esto es especialmente útil si el nombre del campo en el JSON no coincide exactamente con el nombre del campo en tu clase Java.

En tu caso, si estás utilizando FieldNamingPolicy.UPPER_CAMEL_CASE en Gson, estás indicando que Gson debe automáticamente convertir los nombres de los campos de tu clase a UpperCamelCase cuando los serializa o deserializa.

Esto puede hacer que las anotaciones @SerializedName parezcan redundantes si todos los nombres de los campos en el JSON coinciden con los nombres de los campos de tu clase después de aplicar la política de nomenclatura.

Sin embargo, las anotaciones pueden seguir siendo útiles en los siguientes casos:

  1. Nombres de campos específicos: Si algún campo en el JSON tiene un nombre que no puede ser derivado directamente del nombre del campo de tu clase, necesitarás @SerializedName para mapearlo correctamente.

  2. Consistencia y claridad: Usar @SerializedName puede hacer tu código más claro y explícito, especialmente si otras personas trabajan en el mismo proyecto o si el JSON puede cambiar en el futuro.

  3. Compatibilidad: Si en el futuro decides cambiar la política de nomenclatura o si el JSON que consumes proviene de diferentes fuentes con diferentes convenciones de nomenclatura, tener @SerializedName puede prevenir problemas.

En resumen, si estás seguro de que la política de nomenclatura cubrirá todos los casos y que no habrá cambios en el JSON, podrías prescindir de las anotaciones. Sin embargo, su uso puede ofrecer una capa adicional de seguridad y claridad.

Espero haber aclarado tu duda y que esta información te sea útil. ¡Espero haber ayudado y buenos estudios!