zoukankan      html  css  js  c++  java
  • Java 1.5新特性Enum的用法

    Enum是enumeration(列举)的简写形式,包含在java.lang包中.熟悉C, C++, C#, 或 Pascal人应该对列举有所了解,先看个例子:

    public enum Season { winter, spring, summer, fall }

     

    一个enum是定义一组值的对象,它可以包括零个或多个值成员.它是属于enum类型的,一个enum对象中不可有两个或多个相同的属性或值.在次之前的java程序员一般是 用接口的方法实现列举的,如 :

    public interface Season {

       static winter = 0;

       static spring = 1; //etc..

    }

    引入了enum的java的列举的编写方便了许多,只须定义一个enum型的对象.enum对象的值都回自动获得一个数字值,从0开始,依次递增.看一个比较简单的enum实现的例子:

    EnumDemo.java

    package net.javagarage.enums;



    /*

    We can loop over the values we put into the enum

    using the values() method.

    Note that the enum Seasons is compiled into a

    separate unit, called EnumDemo$Seasons.class

    */

    public class EnumDemo {



          /*declare the enum and add values to it. note that, like in C#, we don't use a ; to

     end this statement and we use commas to separate the values */



          private enum Seasons { winter, spring,

           summer, fall }



          //list the values

          public static void main(String[] args) {

                for (Seasons s : Seasons.values()){

                      System.out.println(s);

                }

          }



    }
    运行上述代码你回得到 以下结果:

    winter

    spring

    summer

    fall

    Enum的属性调用:

    下面的代码展示了调用enum对象的方法,这也是它通常的用法:

    package net.javagarage.enums;

    /*

    File: EnumSwitch.java

    Purpose: show how to switch against the values in an enum.

    */



    public class EnumSwitch {



          private enum Color { red, blue, green }



          //list the values

          public static void main(String[] args) {

                //refer to the qualified value

                doIt(Color.red);



          }



          /*note that you switch against the UNQUALIFIED name. that is, "case Color.red:" is a

     compiler error */



          private static void doIt(Color c){



          switch (c) {

          case red: 

                System.out.println("value is " + Color.red);

                break;

          case green: 

                System.out.println("value is " + Color.green);

                break;

          case blue: 

                System.out.println("value is : " + Color.blue);

                break;

          default : 

                System.out.println("default");

          }

          }
    }

    为enums添加属性和方法

    enums也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样.

    package net.javagarage.enums;



    /*

    File: EnumDemo.java

    Purpose: show how to use an enum that also defines its own fields and methods

    */



    public class EnumWithMethods {



    //declare the enum and add values to it.



    public enum Season {



          winter, spring, summer, fall;



          private final static String location = "Phoenix";



          public static Season getBest(){

                if (location.equals("Phoenix"))

                      return winter;

                else

                      return summer;



          }



          public static void main(String[] args) {



          System.out.println(Season.getBest());

          }

    }

    就是这么的简单.但是有一点是需要注意的,那就是enums的值列表必须紧跟在enum声明,不然编译时将会出错.

    Enums构造函数:

    和类一样enums也可以有自己的构造函数,如下:

    package net.javagarage.enums;



    public class EnumConstructor {



          public static void main(String[] a) {



                //call our enum using the values method

                for (Temp t : Temp.values())

                      System.out.println(t + " is : " + t.getValue());

          }



          //make the enum

          public enum Temp {

                absoluteZero(-459), freezing(32),

                boiling(212), paperBurns(451);



          //constructor here

          Temp(int value) {

                this.value = value;

          }



          //regular field?but make it final,

          //since that is the point, to make constants

          private final int value;



          //regular get method

          public int getValue() {

          return value;

          }



          }

    }
    输出结果是:

    absoluteZero is : -459

    freezing is : 32

    boiling is : 212

    paperBurns is : 451

    尽管enums有这么多的属性,但并不是用的越多越好,如果那样还不如直接用类来的直接.enums的优势在定义int最终变量仅当这些值有一定特殊含义时.但是如果你需要的是一个类,就定义一个类,而不是enum.
  • 相关阅读:
    cloud-api-service和cloud-iopm-web提交merge方法
    Java知识点-判断null、空字符串和空格
    Windows本机搭建Redis
    api-gateway-engine知识点(2)
    能够提高开发效率的Eclipse实用操作
    IOP知识点(2)
    获取分辨率及dp/px换算
    Android软件自动更新(自定义处理,不使用第三方)
    友盟自动更新参数详解
    [Android]ping -c 1 -w 100 sina.cn的解析
  • 原文地址:https://www.cnblogs.com/fengye/p/656436.html
Copyright © 2011-2022 走看看