piasecki,podstawy programowania, Typy wyliczeniowe w Javie


Typy wyliczeniowe w Javie.


Stosowane wtedy gdy mamy do czynienia z zestawami stałych.

Najprostsza definicja :

public enum Kolor

{ trefl,karo,kier,pik }


Możliwe działania :


public class TestKolor

{

void test()

{ Kolor kolor= Kolor.trefl;

System.out.println(kolor+" "+kolor.name()+" "+kolor.ordinal());

kolor= Kolor.valueOf("karo");

System.out.println(kolor+" "+kolor.name()+" "+kolor.ordinal());

kolor= Enum.valueOf(Kolor.class,"kier");

System.out.println(kolor+" "+kolor.name()+" "+kolor.ordinal());

kolor= Kolor.values()[3];

System.out.println(kolor+" "+kolor.name()+" "+kolor.ordinal());

switch(kolor)

{ case trefl: System.out.println("wybraleś trefl "); break;

case karo: System.out.println("wybraleś karo "); break;

case kier: System.out.println("wybraleś kier "); break;

case pik: System.out.println("wybraleś pik "); break;

}

for(Kolor k:Kolor.values())

System.out.println(k);

}

}


Możliwe jest definiowanie własnych metod ( przykład kolorów przy grze w tysiąca ) :


public enum Kolor

{

trefl("zoledz",60),

karo("dzwonek",80),

kier("czerwien",100),

pik("wino",40);



private String alias;

private int meldunek;


Kolor(String alias,int meldunek)

{this.alias=alias; this.meldunek=meldunek;}


String dajAlias()

{ return alias; }


int dajMeldunek()

{return meldunek;}


public static Kolor valueOfAlias( String s )

{ try { return valueOf( s ); }

catch ( IllegalArgumentException e )

{ for ( Kolor k : Kolor.values() )

if ( k.dajAlias().equals(s))

return k;

throw new IllegalArgumentException( " nieznany kolor : " + s );

}

}

}


public class TestKolor

{ void test()

{ Kolor kolor= Kolor.trefl;

System.out.println(kolor+" "+kolor.dajAlias()+" "+kolor.dajMeldunek());

kolor= Kolor.valueOfAlias("dzwonek");

System.out.println(kolor+" "+kolor.name()+" "+kolor.ordinal());

kolor= Kolor.valueOfAlias("kier");

System.out.println(kolor+" "+kolor.name()+" "+kolor.ordinal());

}

}


Można również definiować różne metody dla każdej z wartości.


public enum Operation {

PLUS { double eval(double x, double y) { return x + y; } },

MINUS { double eval(double x, double y) { return x - y; } },

TIMES { double eval(double x, double y) { return x * y; } },

DIVIDE { double eval(double x, double y) { return x / y; } };


// Do arithmetic op represented by this constant

abstract double eval(double x, double y);

}


public void test ( ) {

double x = 5.0;

double y = 10.0);

for (Operation op : Operation.values())

System.out.printf("%f %s %f = %f%n", x, op, y, op.eval(x, y));

}





Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron