返回枚举值的前一个值

作者: _夏兮 | 来源:发表于2018-03-19 17:21 被阅读7次

    一、什么是枚举

    枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。

    二、枚举的定义

    定义枚举时候使用enum,与使用class。

    public class EnumDemo {

        public static void main(String[] args){

            //直接引用

            Fruit fruit = Fruit.APPLE;

            System.out.println(fruit);

        }

        //定义枚举类型

        enum Fruit{

            APPLE, PEAR, ORANGES, BANANA

        }

    }

    三、小问题,如何循环读取枚举值

    public class EnumDemo {

        public static void main(String[] args){

            Fruit[] arraryFruits = new Fruit[]{Fruit.APPLE, Fruit.PEAR, Fruit.ORANGES, Fruit.BANANA};

            for(int i = 0; i < arraryFruits.length; i++){

                System.out.println(arraryFruits[i].ordinal()+":"+arraryFruits[i].name());

            }

        }

    }

    //定义枚举类型

    enum Fruit{

        APPLE, PEAR, ORANGES, BANANA

    }

    四、如何返回枚举值的前一个值

    1、定义一个枚举类

    package com.star.demo;

    public enum  EnumFurit {

        APPLE("apple","苹果"),

        PEAR("pear","梨"),

        ORANGES("orange","橙子"),

        BANANA("banana","香蕉");

        private String value;

        private String desc;

        private EnumFurit(String value,String desc){

            this.setValue(value);

            this.setDesc(desc);

        }

        public String getValue() {

            return value;

        }

        public String getDesc() {

            return desc;

        }

        public void setValue(String value) {

            this.value = value;

        }

        public void setDesc(String desc) {

            this.desc = desc;

        }

    }

    2、建立一个与枚举类一致的数据结构类

    package com.star.demo;

    public class FruitEntity {

        private String value;

        private String desc;

        public String getValue() {

            return value;

        }

        public String getDesc() {

            return desc;

        }

        public void setValue(String value) {

            this.value = value;

        }

        public void setDesc(String desc) {

            this.desc = desc;

        }

    }

    3、实现 

    方法:@letEnumToList 将枚举数据转换成list

    @getBeforeEnum 通过位置获取前一个值 第一个返回最后一个

    package com.star.demo;

    import java.util.ArrayList;

    import java.util.List;

    public class EnumDemo {

        public void getBeforeEnum(EnumFurit fruit){

            List<FruitEntity> fruitEntityList = this.letEnumToList();

            int index = fruit.ordinal();

            if( 0 == index){

                int last = fruitEntityList.size();

                System.out.println(fruitEntityList.get(last-1).getValue() + ":" + fruitEntityList.get(last-1).getDesc());

            }else{

                System.out.println(fruitEntityList.get(index-1).getValue() + ":" + fruitEntityList.get(index-1).getDesc());

            }

        }

        public List<FruitEntity> letEnumToList(){

            List<FruitEntity> fruitList = new ArrayList<FruitEntity>();

            for(EnumFurit furit : EnumFurit.values()){

                FruitEntity fruitEntity = new FruitEntity();

                fruitEntity.setValue(furit.getValue());

                fruitEntity.setDesc(furit.getDesc());

                fruitList.add(fruitEntity);

            }

            return fruitList;

        }

    }

    4、测试 

    使用testng进行单元测试

    package com.star.demo;

    import org.testng.annotations.BeforeClass;

    import static org.testng.Assert.*;

    public class EnumDemoTest {

        public EnumDemo enumDemo;

        @BeforeClass

        public void setup() throws Exception{

            enumDemo = new EnumDemo();

        }

        @org.testng.annotations.Test

        public void testGetBeforeEnum_apple_banana() throws Exception {

            enumDemo.getBeforeEnum(EnumFurit.APPLE);

        }

        @org.testng.annotations.Test

        public void testGetBeforeEnum_banana_orange() throws Exception {

            enumDemo.getBeforeEnum(EnumFurit.BANANA);

        }

    }

    写在最后,首先当我看到这个题目的时候,我的第一反应是用swith..,case...实现,但是如添加枚举值,相应的需要改swith了。然后想用list去实现了,感觉还是有点麻烦。。

    相关文章

      网友评论

        本文标题:返回枚举值的前一个值

        本文链接:https://www.haomeiwen.com/subject/dtwuqftx.html