java枚举杂记 2(thinking in java)
来源:互联网 发布:廉租住房软件 编辑:程序博客网 时间:2024/06/06 04:07
枚举的组织
这边创建一个可以组织的枚举,这是书上的例子:
package thinkinginjava.charpter19;import thinkinginjava.utils.Enums;/* * 这是另外的一种组织枚举的方式 */public enum SecurityCategory { STOCK(Security.Stock.class), BOND(Security.Bond.class); Security[] values; //这个所谓的构造方法才是关键的吧,现在的情况是,只要定义了一个枚举对象,那么values就会有对应的值 SecurityCategory(Class<? extends Security> kind){ values = kind.getEnumConstants(); } interface Security{ enum Stock implements Security{SHORT, LONG, MARGIN} enum Bond implements Security{MUNICIPAL, JUNK} } public Security randomSelection(){ return Enums.random(values); } public static void main(String[] args) { for (int i = 0; i < 5; i++) { SecurityCategory category = Enums.random(SecurityCategory.class); //这便是我蒙了,category.randomSelection(),但是现在总算是明白的,因为values已经是有值了。 System.out.println(category+": "+category.randomSelection()); } } /* * result:BOND: MUNICIPALBOND: MUNICIPALSTOCK: MARGINSTOCK: MARGINBOND: JUNK */}
这是一种组织方式,现在看下食物的类似的组织方式:
package thinkinginjava.charpter19;import thinkinginjava.utils.Enums;public enum Meal2 { APPETIZER(Food.Appetizer.class), MAINCOURSE(Food.MainCourse.class), DESSERT(Food.Dessert.class), COFFEE(Food.Coffee.class); private Food[] values; private Meal2(Class<? extends Food> kind){ values = kind.getEnumConstants(); } interface Food { /* * this structure seems strange, follow down, * every enum is food, and then, this make sense. */ enum Appetizer implements Food{ SALAD, SOUP, SPRING_ROLLS; } enum MainCourse implements Food{ LASAGNE, BURRITO, PAD_THAI, LENTILS, HUMMOUS, VINDALOO; } enum Dessert implements Food{ TIRAMISU, GELATO, BLACK_LOREST_CAKE, FRUIT, CREME_CARAMEL; } enum Coffee implements Food{ BLACK_COFFEE, DECAF_COFFEE, ESPRESSO, LATTE, CAPPUCCINO, TEA, HERB_TEA; } } public Food randomSelection(){ return Enums.random(values); } public static void main(String[] args) { /* * here if you want to make some dinner, you can just * select any kind of food you want. * is this program lose the meaning of itself or * I just want to be lazy? */ for (int i = 0; i <6; i++) { for(Meal2 meal: Meal2.values()){ System.out.println(meal.randomSelection()); } System.out.println("-----------"); } } /*print result:SPRING_ROLLSVINDALOOFRUITDECAF_COFFEE-----------SOUPVINDALOOFRUITTEA-----------SALADBURRITOFRUITTEA-----------SALADBURRITOCREME_CARAMELLATTE-----------SOUPBURRITOTIRAMISUESPRESSO-----------SOUPLASAGNEGELATOBLACK_COFFEE-----------*/}
把所有的食物组织到一个类里面,这样看起来,似舒服又不是,但是看起来,是方便管理的,但是就像书上说的,就有更清晰的结构, 因为是放在一起的,这样让我们比较容易的感觉到他们的关系和共性,而不会因为有太多的枚举让我们搞晕~~。
EnumSet的使用
首先只是看例子:
package thinkinginjava.charpter19;/* * 报警器放置地点枚举 */public enum AlarmPoints { STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4, BATHROOM, UTILITY, KITCHEN}
另外一个文件:
package thinkinginjava.charpter19;import java.util.EnumSet;public class EnumSets { public static void main(String[] args) { //just create one empty enum set EnumSet<AlarmPoints> points = EnumSet.noneOf(AlarmPoints.class); //then we can add something points into it points.add(AlarmPoints.BATHROOM); //then check it System.out.println(points); //and add more enum points.addAll(EnumSet.of(AlarmPoints.STAIR1, AlarmPoints.STAIR2)); System.out.println(points); //contain all enum instance points = EnumSet.allOf(AlarmPoints.class); System.out.println(points); //remove enum instance from enumest points.removeAll(EnumSet.of(AlarmPoints.OFFICE1, AlarmPoints.OFFICE2, AlarmPoints.OFFICE3)); System.out.println(points); //another way to remove enum points.removeAll(EnumSet.range(AlarmPoints.LOBBY,AlarmPoints.OFFICE4)); System.out.println(points); //get the enumset element not is points as a Enumset points = EnumSet.complementOf(points); System.out.println(points); } /** [BATHROOM] [STAIR1, STAIR2, BATHROOM] [STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4, BATHROOM, UTILITY, KITCHEN] [STAIR1, STAIR2, LOBBY, OFFICE4, BATHROOM, UTILITY, KITCHEN] [STAIR1, STAIR2, BATHROOM, UTILITY, KITCHEN] [LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4] */}
这边的enumSet也是有待研究的,下面我们看下EnumSet的源代码结构:
to continue….
0 0
- java枚举杂记 2(thinking in java)
- Thinking in Java 之 枚举篇
- thinking-in-java(19)枚举类型
- Thinking in Java(2)
- Thinking in Java 读书笔记(2)
- Thinking in java 学习笔记(2)
- Thinking In Java学习笔记(2)
- 《Thinking In Java》笔记(2)
- thinking in java读书笔记2
- thinking in java 读书笔记2
- Thinking in Java 中文版 2
- Thinking in Java 读书笔记 2
- Thinking in Java笔记2
- Thinking in java学习2
- Thinking in Java笔记 2
- Thinking in java(chapter 2)
- Thinking in Java(四)
- java 枚举杂记3
- HTML 18.5 表单的布局
- 【dlib代码解读】人脸检测器的训练
- What is representation learning?
- 2016-11-05 临界知识修订建议
- PHP 面向对象:方法重载
- java枚举杂记 2(thinking in java)
- http网络请求返回码
- 2016年西安地区各互联网公司薪资概况
- 获取一个服务的开启状态
- SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结
- 安卓动画——————>>>copy链接,后续看
- 目标检测——从RCNN到Faster RCNN 串烧
- shell命令执行hive脚本(hive交互,hive的shell编程)
- 排序问题