Java Tutorial/Data Type/enum

Материал из Java эксперт
Перейти к: навигация, поиск

Comparing Enumeration Values

   <source lang="java">

public class MainClass {

 enum Season {
   spring, summer, fall, winter
 };
 public static void main(String[] arg) {
   Season season = Season.summer;
   if (season.equals(Season.spring)) {
     System.out.println("It is Spring.");
   } else {
     System.out.println("It isn\"t Spring!");
   }
 }

}</source>



It isn"t Spring!


Enumeration Fundamentals

An enumeration is created using the new enum keyword.



   <source lang="java">

enum Week {

 Monday, Tuesday, Wednesday, Thursday, Friday, Saturaday, Sunday

}</source>



Value of aWeekDay: Monday


Enums in a Class

   <source lang="java">

public class Shape {

 private enum ShapeType {
   RECTANGLE, TRIANGLE, OVAL
 };
 private ShapeType type = ShapeType.RECTANGLE;
 public String toString() {
   if (this.type == ShapeType.RECTANGLE) {
     return "Shape is rectangle";
   }
   if (this.type == ShapeType.TRIANGLE) {
     return "Shape is triangle";
   }
   return "Shape is oval";
 }

}</source>





Enum type field

   <source lang="java">

public class ShirtTest {

 public static void main(String[] args) {
   Shirt shirt1 = new Shirt();
   shirt1.setName("new name");
   shirt1.setBid(23.5);
   shirt1.setSize(Size.M);
   System.out.println(shirt1);
 }

} class Shirt {

 private String name;
 private double bid;
 private Size size;
 public Shirt() {
 }
 public void setName(String name) {
   this.name = name;
 }
 public String getName() {
   return name;
 }
 public void setBid(double bid) {
   this.bid = bid;
 }
 public double getBid() {
   return bid;
 }
 public void setSize(Size size) {
   this.size = size;
 }
 public Size getSize() {
   return size;
 }
 @Override
 public String toString() {
   StringBuilder sb = new StringBuilder();
   sb.append(" Name: " + this.getName() + ",");
   sb.append(" Bid: " + this.getBid() + " Dollar,");
   sb.append(" Size: " + this.getSize());
   return sb.toString();
 }

} enum Size {

 S, M, L, XL, XXL, XXXL;

}</source>





enum type with its own method

   <source lang="java">

public class SizeIterator {

 public static void main(String[] args) {
   Size[] sizes = Size.values();
   for (Size s : sizes) {
     System.out.println(s);
   }
 }

} enum Size implements Countable {

 S, M, L, XL, XXL, XXXL;
 @Deprecated
 public Size increase() {
   Size sizes[] = this.values();
   int pos = this.ordinal();
   if (pos < sizes.length - 1)
     pos++;
   return sizes[pos];
 }

} interface Countable {

 public Size increase();

}</source>





enum with switch

   <source lang="java">

public class SizeSwitch {

   public static void main(String[] args) {
       Size size = Size.XL;
       switch(size){
           case S:    
               System.out.println("S");
               break;
           case M:    
               System.out.println("M");
               break;
           case L:    
               System.out.println("L");
               break;
           case XL:    
               System.out.println("XL");
               break;
           case XXL:    
               System.out.println("XXL");
               break;
           case XXXL:    
               System.out.println("XXXL");
               break;                
       }
   }

}

enum Size {

 S, M, L, XL, XXL, XXXL;

}</source>





equals and = operator for enum data type

   <source lang="java">

enum Week {

 Monday, Tuesday, Wednesday, Thursday, Friday, Saturaday, Sunday

} public class MainClass {

 public static void main(String args[]) {
   Week day1, day2, day3;
   day1 = Week.Monday;
   day2 = Week.Monday;
   day3 = Week.Monday;
   if(day1.equals(day2))
     System.out.println("Error!");
   if(day1.equals(day3))
     System.out.println(day1 + " equals " + day3);
   if(day2 == day3)
     System.out.println(day2 + " == " + day3);
 }

}</source>



Error!
Monday equals Monday
Monday == Monday


How to define an enumeration

  1. To define a new type, Day.
  2. Variable of type Day can only store the values specified between the braces.
  3. Monday, Tuesday, ... Sunday are called enumeration constants.
  4. These names will correspond to integer values, starting from 0 in this case.



   <source lang="java">

public class MainClass {

 enum Day {
   Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
 }
 public static void main(String[] args) {
   Day yesterday = Day.Thursday;
   Day today = Day.Friday;
   Day tomorrow = Day.Saturday;
   System.out.println("Today is " + today);
   System.out.println("Tomorrow will be " + tomorrow);
   System.out.println("Yesterday was " + yesterday);
 }

}</source>



Today is Friday
Tomorrow will be Saturday
Yesterday was Thursday


Two enumeration constants can be compared for equality by using the == relational operator

   <source lang="java">

enum Week {

 Monday, Tuesday, Wednesday, Thursday, Friday, Saturaday, Sunday

} public class MainClass {

 public static void main(String args[]) {
   Week aWeekDay;
   aWeekDay = Week.Monday;
   // Output an enum value.
   System.out.println("Value of aWeekDay: " + aWeekDay);
   System.out.println();
   aWeekDay = Week.Friday;
   // Compare two enum values.
   if (aWeekDay == Week.Friday)
     System.out.println(" Friday.\n");
 }

}</source>



Value of aWeekDay: Monday
 Friday.


uses an enum, rather than interface variables, to represent the answers.

   <source lang="java">

import java.util.Random; enum Answers {

 NO, YES, MAYBE, LATER, SOON, NEVER

} class Question {

 Random rand = new Random();
 Answers ask() {
   int prob = (int) (100 * rand.nextDouble());
   if (prob < 15)
     return Answers.MAYBE; // 15%
   else if (prob < 30)
     return Answers.NO; // 15%
   else if (prob < 60)
     return Answers.YES; // 30%
   else if (prob < 75)
     return Answers.LATER; // 15%
   else if (prob < 98)
     return Answers.SOON; // 13%
   else
     return Answers.NEVER; // 2%
 }

} class AskMe {

 static void answer(Answers result) {
   switch (result) {
   case NO:
     System.out.println("No");
     break;
   case YES:
     System.out.println("Yes");
     break;
   case MAYBE:
     System.out.println("Maybe");
     break;
   case LATER:
     System.out.println("Later");
     break;
   case SOON:
     System.out.println("Soon");
     break;
   case NEVER:
     System.out.println("Never");
     break;
   }
 }
 public static void main(String args[]) {
   Question q = new Question();
   answer(q.ask());
   answer(q.ask());
   answer(q.ask());
   answer(q.ask());
 }

}</source>