首页 > 其他分享 >使用枚举消除if-else

使用枚举消除if-else

时间:2024-08-24 18:25:45浏览次数:13  
标签:return String type else 枚举 animal toDo public 消除

举个例子,比如:如果是CAT,需要鱼,MONKEY需要香蕉,PANDA 吃竹子...

那么我们需要这样写if-else

 public static void main(String[] args) {
        String animal = "PANDA";
        String food  = animalEatByType(animal);
        System.out.println(food);
    }

    private static String animalEatByType(String type) {
        if ("PANDA".equals(type)) {
            return "吃竹子";
        } else if("CAT".equals(type)) {
            return "吃鱼";
        } else if("MONKEY".equals(type)) {
            return "吃香蕉";
        }
        return null;
    }

使用枚举后,我们只需要向枚举类中添加类型即可:

public enum AnimalEnum {
    CAT {
        @Override
        public String toDo() {
            //....复杂操作
            return "吃鱼";
        }
    },
    PANDA {
        @Override
        public String toDo() {
            return "吃竹子";
        }
    },
    MONKEY {
        @Override
        public String toDo() {
            return "吃香蕉";
        }
    };

    //定义要做的抽象方法,由每个枚举实现
    public abstract String toDo();
}

调用:

 AnimalEnum animalEnum = AnimalEnum.valueOf(animal);
 String aDo = animalEnum.toDo();
 System.out.println(aDo);

但是可能出现 CAT,MONKEY都吃香蕉的情况,我们可以在枚举类中再定义一个内部枚举来进行扩充



public enum AnimalExtEnum {
    CAT("CAT", AnimalExtEnum.Type.FASH),
    PANDA("PANDA", AnimalExtEnum.Type.ZHUZI),
    MONKEY("MONKEY", AnimalExtEnum.Type.FASH);

    private final String animal;
    private final Type type;

    public String toDo(){
       return type.toDo();
    }

    AnimalExtEnum(String animal,Type type) {
        this.type = type;
        this.animal = animal;
    }

    private enum Type {
        FASH{
            @Override
            public String toDo() {
                return "吃鱼";
            }
        },
        ZHUZI{
            @Override
            public String toDo() {
                return "吃竹子";
            }
        };
        public abstract String toDo();
    }

}

调用:

       String animal = "MONKEY";
        AnimalExtEnum animalExtEnum = AnimalExtEnum.valueOf(animal);
        String aDo = animalExtEnum.toDo();
        System.out.println(aDo);

标签:return,String,type,else,枚举,animal,toDo,public,消除
From: https://blog.csdn.net/m0_73363097/article/details/141503071

相关文章

  • C#通过反射拿到枚举,但是里面有个“value__”,怎么办?
    1usingSystem;2usingUnityEngine;3usingSystem.Reflection;4publicenumExampleEnum5{6Value1,7Value28}9classProgram:MonoBehaviour10{11voidStart()12{13TypeenumType=typeof(ExampleEnum);14......
  • 使用微软Detours库进行模块枚举
    Detours是微软开发的一个强大的WindowsAPI钩子库,用于监视和拦截函数调用。它广泛应用于微软产品团队和众多独立软件开发中,旨在无需修改原始代码的情况下实现函数拦截和修改。Detours在调试、监控、日志记录和性能分析等方面表现出色,已成为开发者的重要工具。本章将指导读者运......
  • OOP篇(Java - 抽象类、类、对象、构造器、接口、内部类、 代码块、枚举)(doing)
    目录一、抽象类1.简介2.什么时候定义抽象类?3.什么是抽象方法?4.抽象类的作用是什么?5.继承抽象类需要做什么?6.抽象类为什么不能创建对象?自己干什么,创建对象毫无意义7.final和abstract是什么关系?二、类1.简介2.表示类关系的UML符号3.类的组成4.如何定义......
  • Java:枚举转换
    在Java中,你可以使用Enum.valueOf()方法将字符串转换为枚举常量。但是,如果你想要将枚举转换为其他类型,你需要自定义转换方法。以下是一个简单的例子,演示如何将枚举转换为整数:publicenumColor{RED(1),GREEN(2),BLUE(3);privatefinalintvalue;Color(......
  • [Python学习日记-10] Python中的流程控制(if...else...)
    简介        假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动作的。你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样的判断怎么办?很简单,只需要在程序里预设一些条件判断......
  • C++:新枚举与新结构
    一、枚举(一)C枚举?真整数!    考虑下面的程序#include<stdio.h>#include<stdlib.h>typedefenum{spring,summer,autumn,winter}Season;voidprintSeason(Seasonseason){ switch(season){ casespring: printf("spring"); break; case......
  • C#接口、结构体、抽象类、枚举、可空类型相关概念
    C#中的接口:定义一套规则,其他类实现规则。规则===》锲约,合同。接口必须实现,才能使用。接口也是多态性的表现。1、C#接口的概念?接口:使用java和asp.net等编写的API接口。让其他人通过相应的请求协议(如:http/https)来访问。理解成“在接口服务器上定义多个方法,在客户端上调用这......
  • python判断语句之if语句、比较和逻辑运算符、if...else...语句、if...elif...else语句
    文章目录1.介绍1.1顺序语句1.2判断语句1.3循环语句2.if语句的基本格式2.1判断语句介绍2.2程序中的判断2.3if语句的基本格式3.比较和逻辑运算符3.1比较运算符3.2逻辑运算符4.if...else...语句4.1if...else...的语法格式4.2实例5.if...elif...else...语......
  • shell编程中的else exit -1是什么意思
    在编程中,`elseexit-1`是一种控制流语句,通常用于条件判断中。具体来说,这段代码的意思是:如果某个条件不满足(即`else`部分),则执行`exit1`,这表示程序将以状态码`-1`退出。 这里的`exit`是一个系统调用或函数,用于终止程序的执行。退出状态码是一个整数,通常用于表示程序......