Java 8 之后,还有哪些进化的功能?( 三 )
下面是一个小测验。下面的代码使用了Java 8的日期和时间API。猜一猜下面代码中的变量类型:
做完了?答案如下所示。
第一行很直观,parse方法返回LocalDate对象。但是后两个你必须对API有一定了解才能得出正确答案:dayOfWeek返回java.time.DayOfWeek,而dayOfMonth返回int。
使用var的另一个潜在问题是,阅读者不得不进一步依赖注释。考虑下面的代码:
有了上一个例子的经验,我打赌你肯定会猜它是java.time.DayOfWeek。但这次是个整型,因为本例中的date是Joda时间。这是个不同的API,行为也略有不同,但你没有发现,因为这个方法非常长,而你并没有阅读所有代码。
如果这里给出了显式类型定义,那么确定dayOfWeek就非常容易。而使用var时,阅读者首先要找到date变量的类型,并检查其getDayOfWeek的行为。在IDE中很容易理解,但快速阅读代码时就没那么容易了。
注意保留重要的类型信息
第二种情况是,使用var会丧失所有类型信息,甚至导致无法推断。大多数情况下这个问题会被Java编译器捕获。例如,var不能推断lambda或方法引用,因为在这些特性中,编译器依赖左侧的表达式来确定类型。
推荐阅读
- 明日之后|明日之后:唯一一次无差评的联动玩法,萌新可能没见过!
- 手机游戏|酒馆战棋:全员恶霸,对5星随从已经过时?新英雄还有新玩法!
- 今屿|今屿媲美花海,小胖回归还有位置吗?李九:小胖不出,花海无敌
- 黑暗与光明|炉石传说英雄卡,曾经强度T0,两年过去,还有人记得雷诺吗?
- 暴雪|暴雪新总裁刚上任3个月就离职,这一次,暴雪还有救吗
- 吃鸡游戏|“吃鸡”高达天降模式的隐藏玩法!不仅可以打卡,而且还有物资!
- |原神梦里生花,可以改变稻妻的样子了,还有420钻,胡桃在等你哦
- 阴阳师|除了爱玩游戏的新岛民,《动物森友会》新版本还有一个电竞彩蛋
- 猪八戒|王者荣耀:李元芳为什么突然间强势了起来?很久没加强,还有天敌
- 明日之后|明日之后“人尸大战”展现中国精神:人类的未来我们共同争取