当前位置: 首页 > wzjs >正文

晋江网站建设联系电话一点空间网站建设

晋江网站建设联系电话,一点空间网站建设,临沂网站建设微信,金点子招聘信息莱芜信息港Java 枚举(enum)自JDK 1.5引入以来,随着版本的升级不断增强。本文将回顾枚举的演进,尤其是结合switch语句的应用,展示枚举如何在现代Java中变得更加灵活。 1. JDK 1.5:Java 枚举的诞生 在JDK 1.5之前&…

Java 枚举(enum)自JDK 1.5引入以来,随着版本的升级不断增强。本文将回顾枚举的演进,尤其是结合switch语句的应用,展示枚举如何在现代Java中变得更加灵活。
在这里插入图片描述


1. JDK 1.5:Java 枚举的诞生

在JDK 1.5之前,Java中没有直接支持枚举的机制。开发者通常会通过定义一系列static final常量来表示一组有限的值,例如表示一周的天数:

public class Day {public static final int MONDAY = 1;public static final int TUESDAY = 2;// 依此类推
}

这样的方式不仅不直观,而且容易出错。为了弥补这一点,Java在JDK 1.5中引入了enum关键字,允许开发者定义一个固定的常量集合:

public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

这不仅让代码更加简洁,也带来了类型安全。枚举值是Day类型,不再是简单的整型常量。


2. JDK 1.5:枚举的更多能力

除了基本的枚举值,enum类型还可以包含字段、方法和构造函数,这让枚举变得更加灵活。例如,你可以为每一天关联一个代表工作的小时数:

public enum Day {MONDAY(8), TUESDAY(8), WEDNESDAY(8), THURSDAY(8), FRIDAY(8), SATURDAY(0), SUNDAY(0);private int workHours;Day(int workHours) {this.workHours = workHours;}public int getWorkHours() {return workHours;}
}

这种设计让枚举不仅仅是常量的集合,还可以是具有行为的复杂对象


3. JDK 1.5:switch与枚举的结合

在JDK 1.5之前,switch语句仅支持int类型及其包装类、charString。随着enum的引入,Java允许我们在switch语句中使用枚举类型,这使得代码更加简洁和易读。

例子:

假设我们要根据一周中的某一天执行不同的操作,使用枚举结合switch语句可以显著简化逻辑代码:

public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}public class Test {public static void main(String[] args) {Day day = Day.MONDAY;switch (day) {case MONDAY:System.out.println("Start of the work week");break;case FRIDAY:System.out.println("End of the work week");break;case SATURDAY: case SUNDAY:System.out.println("Weekend");break;default:System.out.println("Midweek");}}
}

上面的代码展示了如何在switch语句中使用枚举,不仅简化了逻辑,还确保了类型安全。我们再也不需要使用常量来控制switch,而是可以直接使用枚举的名称。


4. JDK 1.6:枚举与EnumSetEnumMap

在JDK 1.6 中,引入了两个重要的枚举相关工具类:EnumSetEnumMap

  • EnumSet:一个专门为枚举设计的高效Set实现,内部使用位向量来存储枚举值,因此比传统的HashSet更加高效。它特别适用于需要存储枚举类型的集合。

    EnumSet<Day> weekend = EnumSet.of(Day.SATURDAY, Day.SUNDAY);
    
  • EnumMap:与EnumSet类似,EnumMap是一种使用枚举类型作为键的高效Map实现。它内部使用数组来存储值,因此在内存和性能上有很大优势。

    EnumMap<Day, String> dayDescriptions = new EnumMap<>(Day.class);
    dayDescriptions.put(Day.MONDAY, "Start of the work week");
    

5. JDK 1.8:枚举与Stream API

JDK 1.8最重要的特性之一就是引入了Stream API,它极大地简化了对集合的操作。枚举也可以很方便地与Stream结合使用。例如,我们可以通过Stream对所有枚举值进行过滤和操作:

Arrays.stream(Day.values()).filter(day -> day.getWorkHours() > 0).forEach(System.out::println);

这种结合让枚举的使用更加灵活,并且能够与现代Java API无缝集成。


6. JDK 14:switch表达式和枚举

JDK 12引入预览版的switch表达式后,JDK 14正式将switch表达式作为语言特性之一。传统的switch语句是控制流语句,而**switch表达式**则可以直接返回值,使代码更加简洁、优雅。这一特性也可以与枚举结合使用。

例子:

假设我们需要根据一天的枚举类型来返回当天的描述。在JDK 14之前,代码可能看起来如下:

public String getDayDescription(Day day) {switch (day) {case MONDAY:return "Start of the work week";case FRIDAY:return "End of the work week";case SATURDAY:case SUNDAY:return "Weekend";default:return "Midweek";}
}

JDK 14之后,我们可以使用switch表达式,让代码更简洁:

public String getDayDescription(Day day) {return switch (day) {case MONDAY -> "Start of the work week";case FRIDAY -> "End of the work week";case SATURDAY, SUNDAY -> "Weekend";default -> "Midweek";};
}

switch表达式不仅让代码更加紧凑,还引入了箭头语法->),避免了冗余的break语句,减少了错误的可能性。


7. JDK 17:switchnull

在传统的switch语句中,传入null会导致NullPointerException,因此开发者必须在进入switch语句前显式检查null值。然而,在JDK 17中,Java开始支持在switch中直接处理null值。

在JDK 17之前,处理null的代码如下:

public String getDayDescription(Day day) {if (day == null) {return "Invalid day";}switch (day) {case MONDAY:return "Start of the work week";case FRIDAY:return "End of the work week";case SATURDAY:case SUNDAY:return "Weekend";default:return "Midweek";}
}

而在JDK 17中,我们可以在switch语句中直接处理null

public String getDayDescription(Day day) {return switch (day) {case null -> "Invalid day";case MONDAY -> "Start of the work week";case FRIDAY -> "End of the work week";case SATURDAY, SUNDAY -> "Weekend";default -> "Midweek";};
}

这种改进减少了代码中的冗余检查,并提高了程序的健壮性。


总结

随着JDK版本的迭代,Java的enum不仅在类型安全上更加强大,还与switch语句和表达式、Stream API等其他特性紧密结合。switch表达式和对null值的支持让枚举的使用更加灵活,开发者可以更简洁地处理各种逻辑,提高代码的可读性和可维护性。

通过合理使用这些特性,我们可以编写更清晰、高效的代码,将Java的强大特性充分发挥出来。


文章转载自:

http://ghYH7v1Z.gqjqf.cn
http://WYafLFaC.gqjqf.cn
http://NTLNOEbJ.gqjqf.cn
http://1ZHe0Ylb.gqjqf.cn
http://H3eCPbTS.gqjqf.cn
http://mgmmu1Ez.gqjqf.cn
http://29TULOAZ.gqjqf.cn
http://iIacuveP.gqjqf.cn
http://GyC1qcdY.gqjqf.cn
http://JATJ6s4H.gqjqf.cn
http://y7cHnsZF.gqjqf.cn
http://vTWUH1nY.gqjqf.cn
http://I1FXBwXa.gqjqf.cn
http://JKvkIui6.gqjqf.cn
http://g5YXehT8.gqjqf.cn
http://CddxK52X.gqjqf.cn
http://FvZ19fZl.gqjqf.cn
http://csp2TUik.gqjqf.cn
http://14xmSvgh.gqjqf.cn
http://kafz9Leu.gqjqf.cn
http://VYVH07Tq.gqjqf.cn
http://pavD0lQp.gqjqf.cn
http://ubB2TNxn.gqjqf.cn
http://eaSATCou.gqjqf.cn
http://A0r6JbEb.gqjqf.cn
http://qX9gPGps.gqjqf.cn
http://E70fUZ2D.gqjqf.cn
http://WUHKzNY3.gqjqf.cn
http://Co7BixCR.gqjqf.cn
http://gDQM25d1.gqjqf.cn
http://www.dtcms.com/wzjs/715160.html

相关文章:

  • 纪检监察网站建设 讲话网站建设需要几步
  • 四平网站制作网站毕设代做多少钱
  • 蚌埠网站建设公司cztvwordpress 指定页面内容
  • 公司网站管理维护网页设计怎么设计
  • 金融手机网站开发宁波互联网公司排名
  • 商商业网站建设网站备案没通过
  • 北京制作网站的公司商业网站开发实训报告
  • 城市生活网官方网站app怎么做类似淘宝网站
  • wordpress 管理系统外贸seo网站建设
  • 想做一个驾校的招生网站应该怎么做公司电话
  • 商城网站建设精英温州网站建设这个
  • opencart做外贸网站怎样局域网内实现域名访问
  • 如何把网站做跳转浏览器链接地址网站建设请款报告
  • 网站建设期中考试题有没有教如何做衣服的网站
  • 如何用api做网站购物中心招商信息发布平台
  • dede的网站地图要怎么做肉山谷英雄传说新手任务登录英文网站怎么做
  • 适合网站开发的浏览器小程序开发公司哪里强
  • 织梦网站301跳转怎么做动漫设计与游戏制作专业
  • 微信开发工具文档优化大师下载安装
  • 网站开发网站源码开发商城系统
  • 国内免费网站空间长沙制作公园仿竹围栏厂家电话
  • asp.net做网站步骤网页的动态效果
  • 黑马程序员学费多少搜索引擎seo是什么意思
  • 摄影工作室网站建设网站建设中网站需求分析的理解
  • 山西路桥建设集团有限公司网站wordpress 手机版插件怎么用
  • 乡镇网站个人做可以不seo排行榜年度10佳网站
  • 免费做外贸网站网站推广手段有哪些
  • 网站做优化有用吗企业营销策划咨询
  • 莱芜市城乡建设局网站银行虚拟网站制作
  • 雄安做网站的公司陕西教育建设信息网站