Java Tutorial/Data Type/enum
Содержание
- 1 Comparing Enumeration Values
- 2 Enumeration Fundamentals
- 3 Enums in a Class
- 4 Enum type field
- 5 enum type with its own method
- 6 enum with switch
- 7 equals and = operator for enum data type
- 8 How to define an enumeration
- 9 Two enumeration constants can be compared for equality by using the == relational operator
- 10 uses an enum, rather than interface variables, to represent the answers.
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
- To define a new type, Day.
- Variable of type Day can only store the values specified between the braces.
- Monday, Tuesday, ... Sunday are called enumeration constants.
- 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>