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

  • 相关阅读:
    docker使用
    接口自动化python3+requests+pytest/unitest
    Django--日常操作
    Redis
    散碎
    Django-- 类视图 Mixin 扩展类
    Django--类视图
    Django--响应
    python高级--正则表达式
    python-数据类型-字符串--常用操作
  • 原文地址:https://www.cnblogs.com/rogge7/p/6845774.html
Copyright © 2011-2022 走看看