zoukankan      html  css  js  c++  java
  • 枚举用法--带抽象方法的更牛

    为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。 JDK 5新增的 enum 关键字用于定义一个枚举类。

    枚举类具有如下特性:
      枚举类也是一种特殊形式的Java类。
      枚举类中声明的每一个枚举值代表枚举类的一个实例对象
      与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
      枚举类也可以实现接口、或继承抽象类
      JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。
      若枚举类只有一个枚举值,则可以当作单态设计模式使用。

    package cn.itcast.enumeration;
    import org.junit.Test;
    public class Demo1 {
        enum Grade{
            A("100-90"),B("89-80"),c("79-70"),D("69-60"),E("59-0");//相当于Object
            private String value;
            private Grade(String value){
                this.value =value;
            }
            public String GetValue(){
                return this.value +"  "+ this.name();
            }
        }
        @Test
        public void test1() {
            Print(Grade.A);  //会输出 100-90  A
        }
        private void Print(Grade g){
            String value= g.GetValue();
            System.out.println(value);
        }
    }

     =============

    带抽象方法的枚举:

    可以在里面定义抽象方法

    不过写的方法看起来有点傻,暂时看不出优点,也不是类似继承的增强,  

     enum 是public static final的  enum又是可以定义抽象方法  感觉有矛盾

    package cn.itcast.enumeration;
    
    import org.junit.Test;
    
    public class Demo1 {
        enum Grade {
            A("100-90") {
                public String GetLocaleValue() {
                    return "成绩优秀";
                }
            },
            B("89-80") {
                public String GetLocaleValue() {
                    return "成绩良";
                }
            },
            c("79-70") {
                public String GetLocaleValue() {
                    return "成绩一般";
                }
            },
            D("69-60") {
                public String GetLocaleValue() {
                    return "成绩及格";
                }
            },
            E("59-0") {
                public String GetLocaleValue() {
                    return "成绩差";
                }
            };// 相当于Object
            private String value;
    
            private Grade(String value) {
                this.value = value;
            }
    
            public String GetValue() {
                return this.value + "  " + this.name();
            }
    
            public abstract  String GetLocaleValue();//不可以带body部分的{}
        }
    
        @Test
        public void test1() {
            Print(Grade.A); // 会输出 100-90 A
        }
    
        private void Print(Grade g) {
            String value = g.GetValue();
            System.out.println(value);
            System.out.println(g.GetLocaleValue());
        }
    
    }
    带抽象方法的枚举

     ------------推荐两篇不错博客

    java基础加强--实现带有抽象方法的枚举 - 时间挤挤 - 博客频道 - CSDN.NET
    http://blog.csdn.net/congwiny/article/details/18894641

    Java 枚举用法详解 - 静默虚空 - 博客园
    http://www.cnblogs.com/jingmoxukong/p/6098351.html

  • 相关阅读:
    Hanoi塔
    采药
    进制转换(大数)
    Load Balancing with NGINX 负载均衡算法
    upstream模块实现反向代理的功能
    epoll
    在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
    粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers
    负载均衡 4层协议 7层协议
    A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie
  • 原文地址:https://www.cnblogs.com/rogge7/p/6845774.html
Copyright © 2011-2022 走看看