Java Enumerations

DOMANDA:

Esistono in Java le Enumerazioni?


RISPOSTA:

Si, anche in Java esistono gli enum Types (Enumerations). Un enum type contiene un insieme di costanti.

Vediamo subito un esempio di come creare un enum:

public enum Coordinate {
   NORD,
   SUD,
   OVEST,
   EST
}

(n.b.: sono scritte in maiuscolo dato che sono delle costanti)

Come si nota, per definire un'enumerazione basta la parola chiave enum.


Un esempio di utilizzo dell'enum precedente in CoordinateTest:

public class CoordinateTest {
   public static void main(String args[]){
       Coordinate c = Coordinate.NORD; // input hardcoded

       switch(c){
          case NORD:
               System.out.println("Stai andando a NORD");
               break;

          case SUD:
               System.out.println("Stai andando a SUD");
               break;

          case EST:
               System.out.println("Stai andando a EST");
               break;

          case OVEST:
               System.out.println("Stai andando a OVEST");
               break;

          default:
               System.out.println("Stai vagando senza meta");
               break; //questo è facoltativo
       }
   }
}

Ovviamente l'output sarà: "Stai andando a NORD".


Gli enum types Java in realtà sono molto più potenti delle enumerazioni degli altri linguaggi. Infatti gli enum Java sono delle classi a tutti gli effetti e, quindi, possono includere anche metodi ed altri campi.
Il compilatore aggiunge in automatico anche dei metodi speciali quando inseriamo i campi enum (ad esempio ci sarà un metodo statico che restituisce un array contenente tutti i valori dichiarati nell'esatto ordine in cui li abbiamo scritti).

Possiamo anche inserire uno o più costruttori, a patto che siano privati o package-private (quindi senza inserire il modificatore di visibilità) perché  le enum non possono essere instanziate esplicitamente con la parola chiave new; la classe creerà infatti in automatico le costanti definite all'interno del corpo della classe.


Guardiamo insieme un esempio di enum più complesso:

package enumeration;

import javax.swing.JOptionPane;

public enum Pianeta {

   MERCURIO   (3.303e+23, 2.4397e6),
   VENERE        (4.869e+24, 6.0518e6),
   TERRA           (5.976e+24, 6.37814e6),
   MARTE          (6.421e+23, 3.3972e6),
   GIOVE           (1.9e+27, 7.1492e7),
   SATURNO    (5.688e+26, 6.0268e7),
   URANO         (8.686e+25, 2.5559e7),
   NETTUNO    (1.024e+26, 2.4746e7);


   private final double massa; // in chilogrammi
   private final double raggio; // in metri

   // costruttore package-private
   Pianeta(double massa, double raggio) {
      this.massa = massa;
      this.raggio = raggio;
   }

   // costante gravitazionale universale (m3 kg-1 s-2)
   public static final double G = 6.67300E-11;

   double gravitaSuperficiale() {
      return G * massa / (raggio * raggio);
   }

   double pesoSuperficiale(double otherMass) {
      return otherMass * gravitaSuperficiale();
   }

   public static void main(String[] args) {
      String valore = JOptionPane.showInputDialog("Inserisci il tuo peso");

      double pesoTerrestre = Double.parseDouble(valore);
      double massa = pesoTerrestre/TERRA.gravitaSuperficiale();

      for (Pianeta p : Pianeta.values())
         System.out.printf("Il tuo peso su %s è %f kg%n",
                                   p, p.pesoSuperficiale(massa));
   }
}


Lanciando la classe Planet ed inserendo 78 come peso, otterremo il seguente output:

Il tuo peso su MERCURIO è 29,465094 kg
Il tuo peso su VENERE è 70,589930 kg
Il tuo peso su TERRA è 78,000000 kg
Il tuo peso su MARTE è 29,541500 kg
Il tuo peso su GIOVE è 197,383487 kg
Il tuo peso su SATURNO è 83,149212 kg
Il tuo peso su URANO è 70,599922 kg
Il tuo peso su NETTUNO è 88,789590 kg

Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java