Нумерованные типы

From AsIsWiki
Revision as of 11:54, 4 April 2015 by Alex (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Форум

Назад | Оглавление | Дальше


Нумерованные типы

Начиная с JDK 5.0 поддерживаются нумерованные типы:

public enum Weapon { LANCE, SWORD, CLUB, BOW };

Тип Weapon является классом. Возможно существование всего четырех экземпляров этого класса. Другие объекты создать нельзя.

Нумерованные значения можно сравнивать оператором ==

Нумерованный тип может содержать конструкторы, методы и поля.
Конструктор вызывается только при создании нумерованных констант:

enum Weapon {

    LANCE("L"), SWORD("S"), CLUB("C"), BOW("B");

    private Weapon(String abbreviation) {
        this.abbreviation = abbreviation;
    }

    public String getAbbreviation() {
        return abbreviation;
    }
    
    private String abbreviation;
}

Нумерованный тип реализуется с помощью подклассов класса Enum, и наследует от него ряд методов:

  • toString() - возвращает имя нумерованной константы:
    String s = Weapon.LANCE.toString();  // s = "LANCE"
  • valueOf() - преобразует строку в экземпляр класса:
    Weapon s = (Weapon) Enum.valueOf(Weapon.class, "LANCE");  // s = Weapon.LANCE

Нумерованный тип содержит статический метод values(), возвращающий массив всех нумерованных значений:

Weapon[] values = Weapon.values();

В отличие от Class, Enum допускает указание типа.
Например, тип Weapon на самом деле преобразуется в Enum<Weapon>

Использование нумерованных типов:

import java.util.*;

public class EnumTest {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        System.out.print("Enter a weapon: (LANCE, SWORD, CLUB, BOW) ");
        String input = in.next().toUpperCase();
        
        Weapon weapon = Enum.valueOf(Weapon.class, input);
        
        System.out.println("Weapon = " + weapon);
        System.out.println("abbreviation = " + weapon.getAbbreviation());
        
        if (weapon == Weapon.BOW) {
            System.out.println("Good choice!");
        }
    }
}

enum Weapon {

    LANCE("L"), SWORD("S"), CLUB("C"), BOW("B");

    private Weapon(String abbreviation) {
        this.abbreviation = abbreviation;
    }

    public String getAbbreviation() {
        return abbreviation;
    }
    
    private String abbreviation;
}



Форум

Назад | Оглавление | Дальше

Personal tools
Namespaces

Variants
Actions
Navigation
Tools