import org.testng.annotations.Test;
public class ShrubberyTest {
@Test(enabled = true)
public void testShrubbery() {
for(Shrubbery s : Shrubbery.values()) {
// ordinal()方法返回一个int值,这是每个enum实例在声明时的次序,从0开始
System.out.println(s + " ordinal: " + s.ordinal());
System.out.println(s.compareTo(Shrubbery.CRAWLING) + " ");
System.out.println(s.equals(Shrubbery.CRAWLING) + " ");
System.out.println(s == Shrubbery.CRAWLING);
// 在enum实例上调用getDeclaringClass()方法,我们就能知道其所属的enum类
System.out.println(s.getDeclaringClass());
// name()方法返回enum实例声明时的名字,这与使用toString()方法效果相同
System.out.println(s.name());
System.out.println("----------------------");
}
for(String s : "HANGING CRAWLING GROUND".split(" ")) {
/**
* valueOf()方法根据给定的名字返回相应的enum实例,如果不存在给定名字的实例,将会抛出异常
* s == null, throw new NullPointerException
* s not exist throw new IllegalArgumentException
*/
Shrubbery shrubbery = Enum.valueOf(Shrubbery.class, s);
System.out.println(shrubbery);
}
}
}
向enum中添加新方法
public enum OzWitch {
/** 如果你打算定义自己的方法,那么必须在enum实例序列的最后添加一个分号
* Java要求你必须先定义enum实例,如果在定义enum实例之前定义了任何方法或属性,那么编译时就会得到错误信息
*/
WEST("Miss Gulch, aka the Wicked Witch of the West"),
NORTH("Glinda, the Good Witch of the North"),
EAST("Wicked Witch of the East, wearer of the Ruby " + "Slippers, crushed by Dorothy's house"),
SOUTH("Good by inference, but missing");
private String description;
OzWitch(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
import org.testng.annotations.Test;
public class OzWitchTest {
@Test
public void test() {
for(OzWitch witch : OzWitch.values()) {
System.out.println(witch + ": " + witch.getDescription());
}
}
}
import org.testng.annotations.Test;
public class SpaceShipTest {
@Test
public void test() {
for(SpaceShip s : SpaceShip.values()) {
System.out.println(s);
}
}
}
switch
public class Burrito {
Spiciness degree;
public Burrito(Spiciness degree) {
this.degree = degree;
}
/**
* enum有一个特别实用的特性,即它可以在switch语句内使用
*/
public void describe() {
System.out.print("This burrito is ");
switch (degree) {
case NOT:
System.out.println("not spicy at all.");
break;
case MID:
case MEDIUM:
System.out.println("a little hot.");
break;
case HOT:
case FLAMING:
default:
System.out.println("maybe too hot.");
}
}
}
import org.testng.annotations.Test;
public class BurritoTest {
@Test(enabled = true)
public void testDescribe() {
Burrito
plain = new Burrito(Spiciness.NOT),
greenChile = new Burrito(Spiciness.MEDIUM),
jalapeno = new Burrito(Spiciness.HOT);
plain.describe();
greenChile.describe();
jalapeno.describe();
}
}