Enumerados: La clase TipoLugar

  video[Tutorial] Tipo enumerados en Java

  video[Tutorial] Clases enumerados en Kotlin
Ejercicio paso a paso: El enumerado TipoLugar

En este ejercicio vamos a crear un tipo enumerado para diferenciar entre diferentes tipos de establecimientos en la aplicación Mis Lugares. Además a cada tipo de lugar le asociaremos un String con el nombre y un recurso gráfico.

1.    Vamos a crear un nuevo tipo enumerado.  Para ello pulsa  con el botón derecho sobre com.example.mislugares.Selecciona New > Java Class  e introduce en Name: TipoLugar  en Kind: Enum.  y pulsa OK.

2.    Reemplaza el código por el siguiente, (dejando la línea de package).

public enum TipoLugar {
    OTROS ("Otros", 5),
    RESTAURANTE ("Restaurante", 2),
    BAR ("Bar", 6),
    COPAS ("Copas", 0),
    ESPECTACULO ("Espectáculo", 0),
    HOTEL ("Hotel", 0),
    COMPRAS ("Compras", 0),
    EDUCACION ("Educación", 0),
    DEPORTE ("Deporte", 0),
    NATURALEZA ("Naturaleza", 0),
    GASOLINERA ("Gasolinera", 0);

    private final String texto;
    private final int recurso;

    TipoLugar(String texto, int recurso) {
        this.texto = texto;
        this.recurso = recurso;
    }

    public String getTexto() { return texto; }
    public int getRecurso() { return recurso; }
} 
enum class TipoLugar private constructor(val texto:String, val recurso:Int){
    OTROS("Otros", 5),
    RESTAURANTE("Restaurante", 2),
    BAR("Bar", 6),
    COPAS("Copas", 0),
    ESPECTACULO("Espectáculo", 0),
    HOTEL("Hotel", 0),
    COMPRAS("Compras", 0),
    EDUCACION("Educación", 0),
    DEPORTE("Deporte", 0),
    NATURALEZA("Naturaleza", 0),
    GASOLINERA("Gasolinera", 0)
} 

Si quieres puedes definir otros tipos de lugares para adaptar la aplicación a tus necesidades. Observa como a cada tipo le asociamos un String con el nombre del tipo de lugar y un entero. El entero se utilizará más adelante para indicar un recurso gráfico en Android con un icono representativo del tipo.

3.    Abre la clase Lugar. En Kotlin añade código subrayado y salta al punto 8:

data class Lugar(… var posicion: GeoPunto.SIN_POSICION,
                   var tipoLugar: TipoLugar = TipoLugar.OTROS, ...
En Java añade el siguiente atributo a la clase:
 private TipoLugar tipo;

4.   Añade el parámetro TipoLugar en el constructor de la clase e inicializa el atributo anterior con este parámetro:

 public Lugar(String nombre, String direccion, double longitud,
        double latitud, TipoLugar tipo, int telefono,
        String url, String comentario, int valoracion) {
    this.tipo = tipo;
    ...
 }

5.  Añade los métodos getter y setter correspondientes. Para ello  pulsa con el botón derecho y seleccionar  en  la opción  Generate > Getters and Setters.

6.  Vamos a volver a generar el método toString(). Para ello pulsa con el botón derecho y seleccionar  la opción Generate > toString().  Pulsa en Yes para reemplazar el método actual.

7.    Abre la clase  Principal y modifica la inicialización del objeto para que se incluya el nuevo parámetro  (TipoLugar.EDUCACION) en el constructor.

8.  Verifica el resultado ejecutando el proyecto.