zoukankan      html  css  js  c++  java
  • 枚举的作用和特性,为枚举元素添加方法


    一、关于枚举的介绍这里引用:http://blog.sina.com.cn/s/blog_4adc4b090101dtxp.html
      枚举是一种规范它规范了参数的形式,这样就可以不用考虑类型的不匹配并且显式的替代了int型参数可能带来的模糊概念 ,它打印出来有自己的名字和顺序(即枚举里的序号)。枚举像一个类,又像一个数组。

      Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征:

    1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。 

    2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。 

    3.Enum默认实现了java.lang.Comparable接口。 

    4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”. 

    5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。 

    6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。 

    7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。 

    二、下面介绍一下枚举的原理:
    其实枚举原理就是用内部类实现的,当然内部类里还有其他的方法,类似下面:

    public class Weekday {
    	
    	public final static Weekday Mon=new Weekday(){
    		public Weekday nexday(){
    		return Tue;
    		}
    	};
    	public final static Weekday Tue=new Weekday(){
    		public Weekday nexday(){
    			return Wen;
    		}
    	};
    	public final static Weekday Wen=new Weekday(){
    		public Weekday nexday(){
    			return Tue;
    	}
    		
    	};
    

      三枚举也可以有自己的方法和构造函数:

    public enum Trafficlamp
    	{
    		red(2),yello(),green();
    		
    		private int index;
    		private Trafficlamp()
    		{
    			System.out.println("11111");
    		}
    		private  Trafficlamp(int a)
    		{
    			System.out.println(a);
    		}
    		
    		
    	}
    

      四、可以覆写枚举的tostring等方法,也可以给枚举添加虚函数,然后用内部类的方法给枚举的成员初始化来给枚举元素添加方法,

    public enum Trafficlamp
    	{
    		red(2){
    
    			@Override
    			Trafficlamp nexlamp() {
    				// TODO Auto-generated method stub
    				return yello;
    			}
    			
    		},yello(){
    
    			@Override
    			Trafficlamp nexlamp() {
    				// TODO Auto-generated method stub
    				return green;
    			}
    			
    		},green(){
    
    			@Override
    			Trafficlamp nexlamp() {
    				// TODO Auto-generated method stub
    				return red;
    			}
    			
    		};
    		private Trafficlamp()
    		{
    			System.out.println("11111");
    		}
    		private  Trafficlamp(int a)
    		{
    			System.out.println(a);
    		}
    		
    		 abstract Trafficlamp nexlamp();
    		
    		
    	}
    

      

  • 相关阅读:
    为什么
    android自定义控件,其三个父类构造方法有什么区别
    MocorDroid编译工程快速建立编译环境
    通话挂断后如何提示用户通话时长
    incallui中如何查询联系人数据
    protected-broadcast的作用
    ubuntu12.04安装openjdk-7
    Android JNI的使用浅析
    android listen
    android:minSdkVersion的总结
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4781669.html
Copyright © 2011-2022 走看看