Loading...

Enum

 

Жекече примитивдүү берилиштердин түрлөрүнөн жана класстарынан тышкары, Java энум же санап чыгуу сыяктуу түргө ээ. Enums логикалык жактан байланышкан туруктуулардын жыйындысын билдирет. Санактоо эсептин аты менен коштолгон enum операторунун жардамы менен жарыяланат. Андан кийин сандык элементтердин үтүр менен бөлүнгөн тизмеси келет:

 

enum Day{

 

    MONDAY,

    TUESDAY,

    WEDNESDAY,

    THURSDAY,

    FRIDAY,

    SATURDAY,

    SUNDAY

}

Enum чындыгында жаңы типти билдирет, ошондуктан биз ошол түрдөгү өзгөрмөлөрдү аныктап, аны колдоно алабыз:

public class Program{

     

    public static void main(String[] args) {

         

        Day current = Day.MONDAY;

        System.out.println(current);    // MONDAY

    }

}

enum Day{

 

    MONDAY,

    TUESDAY,

    WEDNESDAY,

    THURSDAY,

    FRIDAY,

    SATURDAY,

    SUNDAY

}

Enums маалыматтарды сактоо үчүн класстарда колдонулушу мүмкүн:

public class Program{

     

    public static void main(String[] args) {

         

        Book b1 = new Book("War and Peace", "L. Tolstoy", Type.BELLETRE);

        System.out.printf("Book '%s' has a type %s", b1.name, b1.bookType);

        

        switch(b1.bookType){

            case BELLETRE:

                System.out.println("Belletre");

                break;

            case SCIENCE:

                System.out.println("Science");

                break;

            case SCIENCE_FICTION:

                System.out.println("Science fiction");

                break;

            case PHANTASY:

                System.out.println("Phantasy");

                break;

        }

    }

}

class Book{

 

    String name;

    Type bookType;

    String author;

 

    Book(String name, String author, Type type){

         

        bookType = type;

        this.name = name;

        this.author = author;

    }

}

 

enum Type

{

    SCIENCE,

    BELLETRE,

    PHANTASY,

    SCIENCE_FICTION

}

Book классы, кадимки өзгөрмөлөрдөн тышкары, биздин тизмектин түрүнүн өзгөрмөсүн да камтыйт. Конструктордо биз аны кадимки класс талаалары сыяктуу дайындай алабыз.

 

Switch..case конструкциясын колдонуу менен, bookType маанисинин белгилүү бир санауу константасына таандык экендигин текшере аласыз.

Энум методдору

Ар бир enum статикалык values() ыкмасына ээ. Ал бардык энум константаларынын массивин кайтарат:

public class Program{

     

    public static void main(String[] args) {

         

        Type[] types = Type.values();

        for (Type s : types) { System.out.println(s); }

    }

}

enum Type

{

    SCIENCE,

    BELLETRE,

    PHANTASY,

    SCIENCE_FICTION

}

ordinal() методу белгилүү бир константтын иреттик санын кайтарат (номерлөө 0дөн башталат):

System.out.println(Type.BELLETRE.ordinal());    // 1

Конструкторлор, талаалар жана эсепке алуу методдору

Энумдар кадимки класстар сыяктуу конструкторлорду, талааларды жана методдорду аныктай алат. Мисалы:

public class Program{

     

    public static void main(String[] args) {

         

        System.out.println(Color.RED.getCode());        // #FF0000

        System.out.println(Color.GREEN.getCode());      // #00FF00

         

        

    }

}

enum Color{

    RED("#FF0000"), BLUE("#0000FF"), GREEN("#00FF00");

    private String code;

    Color(String code){

        this.code = code;

    }

    public String getCode(){ return code;}

}

Color enum түс кодун кармоо үчүн жеке код талаасын аныктайт жана getCode ыкмасын колдонуу менен кайтарылат. Маани ага конструктор аркылуу берилет. Белгилей кетчү нерсе, демейки конструктор купуя, башкача айтканда, анын жеке өзгөрткүчү бар. Бардык башка өзгөрткүч ката катары каралат. Ошондуктан, конструкторду колдонуу менен enum константаларын түзө алабыз.

 

Сиз ошондой эле жеке туруктуулар үчүн ыкмаларды аныктай аласыз:

public class Program{

     

    public static void main(String[] args) {

         

        Operation op = Operation.SUM;

        System.out.println(op.action(10, 4));   // 14

        op = Operation.MULTIPLY;

        System.out.println(op.action(6, 4));    // 24

    }

}

enum Operation{

    SUM{

        public int action(int x, int y){ return x + y;}

    },

    SUBTRACT{

        public int action(int x, int y){ return x - y;}

    },

    MULTIPLY{

        public int action(int x, int y){ return x * y;}

    };

    public abstract int action(int x, int y);

}