接口和枚举在方法中的区别

枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。

用户可以将一个枚举类型看作是一个类,它继承于 java.lang.Enum 类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被final、 public、static修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。

package com.example.enumerate;


import javax.swing.*;

//将常量放置在接口中
interface Constants{
    public static final int Constatnts_A=1;
    public static final int Constatnts_B=12;
}

//将常量放置在枚举中
public class ConstantsTest{
    enum Constants2{
        Constants_A, Constants_B
    }

    //使用接口定义常量
/*    public static void doit(int c){
        switch (1){
            case Constants.Constatnts_A:
                System.out.println("doit() Constants_A");
                break;
            case Constants.Constatnts_B:
                System.out.println("doit() Constants_B");
                break;
        }
    }*/

    //定义一个参数对象是枚举类型的方法
    public static void doit2(Constants2 c){
        switch (c){
            case Constants_A:
                System.out.println("doit()1 Constants_A");
                break;
            case Constants_B:
                System.out.println("doit2()1 Constants_B");
                break;
        }
    }

    public static void main(String[] args) {
        //使用接口中定义的常量
//        ConstantsTest.doit(Constants.Constatnts_A);
        //使用枚举类型中的常量
        ConstantsTest.doit2(Constants2.Constants_A);
//        使用枚举类型中的常量
        ConstantsTest.doit2(Constants2.Constants_B);

        //备注:该方法接受接口中定义的常量参数
//        ConstantsTest.doit(1);

        //备注:因为方法只接受枚举类型的常量作为参数
//        ConstantsTest.doit2(3);
        
    }
}

  • 通过代码证明枚举类可以有不止一个构造方法
public class EnumIndexTest {
     enum Constants2{
        //将常量放置在枚举类型中
        Constants_A("我是枚举成员A"),
        Constants_B("我是枚举成员B"),
        Constants_C("我是枚举成员C"),
        Constants_D(3);

        private String description;
        private int i = 4;
        private Constants2(String description){
            //定义参数为String型的构造方法
            this.description = description;
        }
        //定义带参数的构造方法,参数类型为整型.
        private Constants2(int i){
            this.i=this.i+i;
        }
        public String getDescription(){
            return description;
        }
        public int getI(){
            return i;//获取i的值
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < Constants2.values().length; i++) {
            System.out.println(Constants2.values()[i]+"调用getDescription()方法为: "
            +Constants2.values()[i].getDescription());

        }
        System.out.println(Constants2.valueOf("Constants_D")+"调用getI()方法为: "
        +Constants2.valueOf("Constants_D").getI());
    }
}
  • 还可以将这个getDescription()方法放置在接口中,使枚举类型实现该接口,然后使每个枚举类型实现接口中的方法。代码如下:
interface d{
    public String getDescription();
    public int getI();
}

public enum AnyEnum implements d{
    Constants_A{
        //在枚举类型成员内部设置方法
        public String getDescription(){
            return ("枚举成员A");
        }
        public int getI(){
            return i;
        }
    },

    Constants_B{
        //在枚举类型成员内部设置方法
        public String getDescription(){
            return ("枚举成员B");
        }
        public int getI(){
            return i;
        }
    },

    Constants_C{
        //在枚举类型成员内部设置方法
        public String getDescription(){
            return ("枚举成员C");
        }
        public int getI(){
            return i;
        }
    },

    Constants_D{
        //在枚举类型成员内部设置方法
        public String getDescription(){
            return ("枚举成员D");
        }
        public int getI(){
            return i;
        }
    },
    Constants_E{
        @Override
        public String getDescription() {
            return null;
        }

        @Override
        public int getI() {
            return 0;
        }
    };
    private static int i=5;

    public static void main(String[] args) {
        for (int i = 0; i < AnyEnum.values().length; i++) {
            System.out.println(AnyEnum.values()[i]+"调用getDescription()方法: "
            +AnyEnum.values()[i].getDescription());
            System.out.println(AnyEnum.values()[i]+"调用Get()方法为: "
            +AnyEnum.values()[i].getI());
        }
    }



   /* @Override
    public String getDescription() {
        return null;
    }

    @Override
    public int getI() {
        return 0;
    }*/
}
posted @ 2024-04-07 15:25  文采杰出  阅读(34)  评论(0)    收藏  举报