From Gossip@caterpillar

Java Gossip: ²¤¶¦CÁ|«¬ºA

¦b ±`¼Æ³]¸m ¤¤¡A±zª¾¹D¥i¥H¦bÃþ§O¡]Class¡^©Î¤¶­±¡]Interface¡^¤¤«Å§i±`¼Æ¥[¥HºÞ²z¡A³o¥u¬OÅý±z¦s¨ú»PºÞ²z±`¼Æ¤è«K¦Ó¤w¡A¨Ó¬Ý¬Ý³o­Ó¨Ò¤l¡G
public void someMethod() {
     ....
    doOp(OpConstants.TURN_RIGHT);
    ....
}
 
public void doOp(int op) {
    switch(op) {
        case OpConstants.TURN_LEFT:
            System.out.println("¦V¥ªÂà");
            break;
        case OpConstants.TURN_RIGHT:
            System.out.println("¦V¥kÂà");
            break;
        case OpConstants.SHOOT:
            System.out.println("®gÀ»");
            break;
    }
}

¬Ý¨Ó¬O¤£¿ù¡A¦ýdoOp()¤èªk±µ¨üªº¬Oint¡A±z¨S¦³ªý¤î²Ê¤ßªºµ{¦¡³]­p¤H­û¹ï¥¦¿é¤JOpConstants¤¤³W©w¥~ªº¨ä¥¦±`¼Æ¡A±z¤]¨S¦³Àˬd switch¤¤¦CÁ|ªº­È¬O¤£¬O¥¿½Tªº­È¡A¦]¬°¥¦°©¤l¸Ì´N¥u¬Oint¦Ó¤w¡C

·íµM±z¥i¥H§@¤@¨ÇÀˬd¡A³o»Ý­n¤@¨ÇÃB¥~ªº¤u§@¡A¦pªG±z¨Ï¥Î J2SE 5.0¡A«h³o¨ÇÃB¥~ªº¤u§@±z¤£¥Î¿Ë¦Û³B²z¡A¨Ï¥Î¦CÁ|«¬ºA¡]Enumerated Types¡^¥i¥H»´©öªº¸Ñ¨M³o¨Ç°ÝÃD¡C

¦bJ2SE 5.0¤¤¨Ï¥Î¦CÁ|«¬ºA­n¨Ï¥Î"enum"ÃöÁä¦r¡A¥H¤U¥ý¨Ó¬Ý¬Ý¦CÁ|«¬ºAªºÀ³¥Î¡AÁ|­Ó¹ê»Úªº¨Ò¤l¡G

  • OpConstants.java
public enum OpConstants {TURN_LEFT, TURN_RIGHT, SHOOT}

¤£¥ÎÃhºÃ¡A¦bOpConstants.java¤¤¼g¤U¥H¤Wªº¤º®e¡AµM«á¥Îjavac¥h½sĶ¥¦¡AÁöµM»yªk¤W¤£¹³¡A¦ý¦CÁ|«¬ºA°©¤lùØ´N¬O¤@­ÓÃþ§O¡A©Ò¥H±z½sͧ¹¦¨«á¡A·|²£¥Í¤@­ÓOpConstants.classÀɮסC

¨Ó¬Ý¤U­±³o­Ó¨Ò¤lÁA¸Ñ¦p¦ó¨Ï¥Î©w¸q¦nªº¦CÁ|«¬ºA¡G

  • Test.java
public class Test {
public static void main(String[] args) {
doOp(OpConstants.TURN_RIGHT);
}

public static void doOp(OpConstants opConstant) {
switch(opConstant) {
case TURN_LEFT:
System.out.println("¦V¥ªÂà");
break;
case TURN_RIGHT:
System.out.println("¦V¥kÂà");
break;
case SHOOT:
System.out.println("®gÀ»");
break;
}
}
}

°õ¦æµ²ªG¡G
¦V¥kÂà

°£¤FÅý±z¤Ö¥´¤@¨Ç¦r¤§¥~¡A¦n¹³¨S¦³¤°»ò¯S§Oªº¡A¦ý¦pªG±z¹ïdoOp()¤èªk¿é¤J¨ä¥¦ªº­È¡A½s;¹·|¦^³ø¿ù»~¡A¦]¬°doOp()©Ò±µ¨üªº¬O OpConstants¦CÁ|«¬ºA¡C

§ó¶i¤@¨Bªº¡A¦pªG±z¦bswitch¤¤¥[¤J¤F¤£ÄÝ©óOpConstants¤¤¦CÁ|ªº¼Æ­È¡A½s;¹¤]·|¦^³ø¿ù»~¡A¨Ò¦p¡G
....
    public static void doOp(OpConstants opConstant) {
        switch(opConstant) {
            case TURN_LEFT:
                System.out.println("¦V¥ªÂà");
                break;
            case TURN_RIGHT:
                System.out.println("¦V¥kÂà");
                break;
            case SHOOT:
                System.out.println("®gÀ»");
                break;
            case STOP:
                System.out.println("°±¤î");
                break;
        }
    }
 ....
 

½s;¹·|´À±z§@½sͮɴÁªºÀˬd¡A­YÀˬd¥X¤£ÄÝ©óOpConstant¤¤ªº¦CÁ|­È¡A·|Åã¥Ü¥H¤Uªº¿ù»~¡G
unqualified enumeration constant name required
case STOP:
^

±z¥i¥H¦b¤@­Ó¿W¥ßªºÀɮפ¤«Å§i¦CÁ|­È¡A©Î¬O¦b¬Y­ÓÃþ§O¤¤«Å§i¦CÁ|¦¨­û¡A¨Ò¦p¡G

  • Test.java
public class Test {
private enum OpConstant {TURN_LEFT, TURN_RIGHT, SHOOT};

public static void doOp(OpConstant opConstant) {
switch(opConstant) {
case TURN_LEFT:
System.out.println("¦V¥ªÂà");
break;
case TURN_RIGHT:
System.out.println("¦V¥kÂà");
break;
case SHOOT:
System.out.println("®gÀ»");
break;
}
}

public static void main(String[] args) {
doOp(OpConstant.TURN_LEFT);
}
}

¥Ñ©ó¦CÁ|«¬ºA¥»½è¤WÁÙ¬O­ÓÃþ§O¡A©Ò¥H³oºØ¤è¦¡¦³¨Ç¹³¦b«Å§i ¤º ³¡Ãþ§O¡]Iinner class¡^¡A ¦b±z½sͧ¹Test.javaÀɮ׫á¡A°£¤FTest.class¤§¥~¡A±z·|¦³¤@¨ÇÃB¥~ªº.classÀɮסA¦b³o­Ó¨Ò¤l¤¤´N¬OTest$ OpConstants.class»PTest$1.class¡A¬Ý¨ì«á¨â­ÓÀɮסA±z´NÀ³¸ÓÁA¸Ñ¨ì³o­Óµ{¦¡ªº­I«á¹B§@ªº¦³¤º³¡¦¨­ûÃþ§O¥H¤Î¤º³¡°Î¦WÃþ§O¡C