一、什么是枚举
枚举类型是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去实现了,感觉还是有点麻烦。。
网友评论