范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java8之后的那些新特性(一)局部变量var

  本周开始,我将开启一个新的系列,这个系列是关于Java的。
  在IDEA中2021年的一个调查中,程序员中使用Java的版本中,Java 8仍是主流。新的长期支持版Java 11,Java 17并未有Java 8流行。
  我并不认为一定得使用新版的Java,但我们也要意识到Java 8是在2014年发布的,距今已经是8年之久了。而在这8年中,类似Kotlin,Swift,TypeScript语言都在不断的更新优化自己的语言特性。
  这使得Java 8相比起来,在让代码更简洁优雅上越来越有所差距。好在,Java并未停止它前进的步伐,从Java 8之后的许多个版本,在借鉴参考其它语言优秀的特性的基础之上,Java发展出了新的能让代码更简洁的语法特性。
  一起来随我一起了解一下,究竟有哪些新的语言特性值得我们关注吧。
  这是第一篇,我来说一下局部变量var这个特性吧。 变量与常量
  在声明变量这个事情上,大家所熟知的Java变量申明方式是: //变量 EntityRepository entityRepository = new EntityRepositoryJPA(); //常量 final String httpMethod = "post"
  Java变量申明的方式是 类 + 名称 的方式来进行申明 ,如果是常量,则以final 关键字来申明。
  我们可以对比下其它语言的变量申明方式
  Kotlin中是以var声明变量,val申明常量  //变量 var entityRepository = EntityRepositoryJPA() //常量 val httpMehod = "post"
  TypeScript是以let来声明变量,const来申明常量  //变量 let entityRepository = new EntityRepositoryJPA() //常量 const httpMethod = "post"
  Swift中是由var定义变量,let来定义常量  //变量 var entityRepository = EntityRepositoryJPA() //常量 let httpMethod = "post"
  从上面对比可以看出,相较于Java的 类型 + 名称 的定义方式,新的语言都偏好关键字 + 名称 的模式。类型自动判定
  事实上,现代编程语言,都非常喜欢最大限度的使用 类型自动判定 ,也就是关键字 +名称 这种模式。
  类型推定的基本原则是:只要通过上下文能猜测到的,就不需要明确声明它的类型
  因为,一个显而易见的点是,这样的代码确实更简洁。
  我们如果用 关键字 + 名称 的写法来重写上述Java代码中的变量与常量定义,那我们的代码就是是如此://使用(关键字 + 名称)的模式重写  //变量 var entityRepository = new EntityRepositoryJPA(); //常量 var httpMethod = "post"
  依据类型自动判定的逻辑,编译器和我们程序员,都会很显而易见的猜测到,entityRepository的类型是EntityRepositoryJPA类的实例,而 httpMethod 则是一个String类型。
  当然,上面这个例子可能不太令人感觉到必要性,因为简洁不到哪去,但在一些复杂的场景中,确实能简洁很多 //使用旧有模式 Collector> byOccurrence      = groupingBy(Function.identity(), counting());  //使用var来重写 var byOccurrence = groupingBy(Function.identity(), counting()); 语法解析
  所以,Java 10引进了局部变量var这个关键字,最显著的一个原因就是: 简化代码
  很难说这个特性没有借鉴其它现代主流语言,我认为肯定是参考与借鉴了的。
  但受限于Java过于长久的历史,这个特性相比其它语言,也只是个 半吊子 的实现,它有挺多的限制var关键字只能在方法中使用,不能在方法参数,类参数等上使用 var是变量的含义,没有简化常量的关键字
  其中,最大的一个受限就是,你只能在方法中的局部变量中使用var这个关键字     @Test     void testEntityExists(){         var exists = repository.exists(User.class,-1L);         Assertions.assertFalse(exists);          var created = repository.save(randomUser());         exists = repository.exists(User.class,created.getId());         Assertions.assertTrue(exists);     }
  如上代码所示,你只能在方法内部使用var,不能在其它地方使用这个关键字,而且它表示 变量 ,对于常量,并无相应的关键字来简化。缺点与影响
  优点我就不说了,上面说了,最大的也基本上是最主要的优点是让代码更简洁。
  还是来说缺点吧。
  就我个人的经历来说,我认为,对于长期使用Java语言的程序员来说,这个特性的缺点表现为如下:
  Java程序员并不习惯这个风格
  如果是前端 ,移动端的程序员,他们使用的主要编程语言都基本上是 关键字+名称 的模式,会对这种风格非常熟悉。
  比如对于我这样的,确实我在知道这个特性之后,非常喜欢这样,瞬间基本上就切换为这种模式了,因为我在其它语言中,都是这种风格,我习惯了 关键字+名字 的风格。
  但一直从事Java的程序员并不一样, 类名+名称 的风格他们太熟悉了,对他们来说,这个半吊子特性并无特别使用的必要。
  我们都非常喜欢自己熟悉的风格,不是么?
  局部的优化而非全局性转变
  Java的这个转变,并非是全局性的,你在类的变量,方法参数中,并不能使用这种风格。
  这导致这个转变的影响面比较小,可能进一步加剧了大家对这个特性的忽略。
  影响了代码的可读性
  好吧,我们都知道,简洁性与可读性可能有时候方向不太一样;越简洁,有时候越难以阅读,啰嗦一点,可能读起来更容易理解。
  这种风格,对于习惯了的人来说,并不存在阅读性上的减弱的影响,但对于Java程序员来说,感觉可读性还是会降低一些。
  关于这一点,IDEA这个工具为了强化可读性,提供了一个非常有意思的工具辅助。参照下面的图
  看到没,IDEA自动把var的类型显示出来了。
  为什么IDEA要这么干?肯定是因为Java程序员不太熟悉这种风格,用这种方式来帮助和提醒程序员。
  但站在经常使用其它语言的人,比如我这样的来看,这种并无太多必要。事实上,在IDEA中使用Kotlin时,压根就没有这种提示。
  参照如图所示:
  可见,这个提示是特意为Java准备的,非常贴心。 值得赞赏的进步
  在我知道Java有局部变量以后,受到我过往使用其它语言的影响,我确实很快转变过来了,这种转变几乎不费什么成本。而且从我的编码感觉上来看,这种确实令代码更简洁,这是肯定的。
  但对于那些从始至终使用Java的程序员来说,这种转变我认为需要一些成本。
  但为了追求代码的简洁性,这也是非常值得的。
  当然,一切都由你自己随心所欲来决定了。
  不过从这一点上来看,我倒是对Java这门语言刮目相看,它确实没有停止自己的步伐,不断的借鉴与学习其它现代语言的一些新的好的做法,改进自身。
  而从Java 8到现在最新的Java 17,这个语言都升级了这么多个版本,改进的当然不会是只这一点。
  仅凭我们对Java的热爱,我们也确实值得跟随我们喜欢的这门语言,不要再停留在八年前的版本了,不是么?
  下一篇,我将继续聊聊Java 8之后的有意思的新特性。、

晶泰科技抗肿瘤新药开发取得重要进展,提速50提前进入下一研发阶段读特客户端深圳新闻网5月10日讯(记者李旖露)记者从药物研发公司晶泰科技获悉,近日公司与医药集团合作的高难度抗肿瘤新药项目取得重要进展。在晶泰科技智能化自动化药物发现平台的助力下,5年增长近3倍韩NAVER网漫平台月活用户超1。8亿人据韩联社网站近日报道,随着网络漫画市场逐步扩大,韩国互联网巨头领航员公司(NAVER)旗下网漫平台NAVER网漫(NAVERWEBTOON)的活跃用户规模近5年增长近3倍,已超过1为了卸载360,中日网友合作了当日本网友遇到360,是一场什么样的奇遇?结局是不知道怎么卸载。这事其实可以理解,即便是熟知汉语的我们,在卸载360的时候,也必须时时刻刻留心。黑马自己也是演练了一遍。在卸载的时候最牛黑客故事17岁破解iPhone,20岁攻陷索尼,25岁拒绝马斯克5岁写出第一套电脑程序,17岁破解第一代iPhone,20岁攻陷索尼PS3,马斯克以数百万年薪邀请,他却嫌弃特斯拉无人驾驶技术太垃圾,转头在自家车库里捣鼓起自动驾驶系统,而且还成功周四有爆发潜力的五大板块,值得收藏研究一新能源汽车14月新能源汽车同比上涨112。2龙一金钟股份龙二亿利达龙三爱柯迪其他强势人气股鹏辉能源天龙股份长安汽车二新G疫情影响持续,检测一苗要物有望成为疫情下常态化的防疫和治疗在iPad使用Win10办公,向日葵智能远控蓝牙鼠标试一下各位,你们被远程办公过么?我之前经常出差,为了应付远程办公,每次出差都会带一台笔记本,不过,笔记本实在有点重,后来同事推荐了国民远控软件向日葵之后,我就开始用iPad远程办公,出差小众但高端,黑爵AK816机械键盘掀起国产客制化潮流?经常玩外设的朋友应该都知道黑爵这个品牌,V叔从接触这个品牌开始,看着它不断地在创新和进步,也相继推出了一些让人耳目一新的产品。比如K620T,虽说是62键,但使用的场景是足够了,而手机厂商推大闪存的原因不废话是客户对手机的粘性心理,换手机前都是深思熟虑的,再换手机怕又麻烦一次,而且再换个其他厂商不知道会不会更难用,二手又卖不贵,就算系统不好用也将就用了。你为什么换手机?1坏了2闪鸿蒙3。0支持名单再次更新新机没在内,但老机型不用担心了时间已经来到了五月中旬,手机厂商已经逐渐开启新一轮的战场,有的开始针对千元手机进行发力,有的则开始对线下市场的机型进行暗自发力。而对于华为手机来说,接下来要做的或许只有三件事情,第WEB前端开发的技术选型一目标1。服务端开发。没有服务端这一层抽象,没有了服务端路由和服务端中间件技术,前端开发的成果沦为在web服务器上托管一个静态html资源文件夹,毫无疑问是不可接受的!让前端程序员埃森哲发布2022年技术展望四大技术趋势将成元宇宙基石来源经济日报经济日报讯(记者袁勇)埃森哲日前发布报告技术展望2022指出,未来网络编码世界虚实共生无限算力四大技术趋势将成为构建元宇宙的基石,也蕴藏着大量机遇,值得企业挖掘。当前,
新世界七大奇迹大兴机场,都用了哪些物联网黑科技?9月25日,备受瞩目的北京大兴国际机场正式投入运营,凤凰展翅,振翅高飞!作为民航局打造的智慧机场30样板工程,北京大兴国际机场利用物联网技术云计算及存储个人智能终端虚拟可视化技术等要颜值有颜值,要保鲜有保鲜,松下这两个款日本进口冰箱谁不爱?冰箱电视洗衣机,曾经中国消费者们心目中的家电三大件,已随着消费升级的步伐,悄悄迎来了新一轮的革新。在经过日新月异的发展之后,家电从功能延展到颜值,在进行了多轮进化升级后,时至今日,干湿清洁,功能齐活吉米轻便三合一全屋吸尘洗地一体机体验开始之前,先来聊聊家里最近的情况,有娃之后,家里领导拒绝了长辈过来帮忙,坚持自己带娃,但全职居家带娃势必难以兼顾一些家务,尤其现在宝宝特别爱爬,有时候都会从爬行垫的护栏里伸出手摸外鹿晗带老人机坐高铁尴尬了!网友喊话别给老人机贴社死标签当下,功能机仍然存活于市场,这并不是因为一些手机厂商的坚持,而是用户群体的需求所致。即便智能手机已经普遍应用了,但当下仍然有一部分老年人对功能机青睐有加,但不乏也有一些年轻人,这不荣耀60背部彻底曝光,颜值依旧抗打,前置相机和屏幕大幅提升荣耀60系列已经确定将会在12月1号发布,目前官方也在持续预热当中,它的背部设计已经得到了曝光,类似星空的造型确实美不胜收。相机设计与荣耀50有相似之处,不过看双环的装饰有了新的改哪种听歌app不开会员可以播放比较全面的各种歌曲?波老师之前推过好几次好用听歌APP特辑,效果都不错,今天波老师整理了一下手上比较好用的应用软件推荐给大家!QQ音乐波老师推荐给大家QQ音乐是VIP版本,直接登录享受全部功能,波老师蹭网人数多导致网速很慢,改密码后邻居大妈跑来我家问,该怎么办?蹭网人数多,导致网速很慢,改密码后邻居大妈跑来我家问,那你就大声问她为什么你蹭我家的网可以理直气壮,梁静茹给你的勇气吗?你给我家网络交网费了吗?没有给我家网络缴费的话,密码无可奉告联想有核心技术吗,你认为有,就发表出来,让大家了解一下?这真是个好问题,联想的核心技术就是组装电脑机箱,并且,还是买办资本的代表,享受着国家政策福利,压榨着国内改革开放紅利。口口声声一再表明,自己不是中国企业。可笑,更可耻。而更可恨的是苹果电脑的什么地方吸引你?本人一名iOS开发者,使用苹果设备较多,接触的时间也较长,差不多有10年使用经验了。说说我的经历。我自己是从Java开发转到iOS开发的。目前也还是这个职业。记得当时还在做Java电视面板价格继续走低,双十二电视价格将创新低面板价格持续一年的上涨之后在今年7月迎来下跌,相比上涨的速度,这次下跌的速度来的非常快幅度也非常大。截止到今年10月,32寸面板跌幅超过42,43寸面板跌幅超过33,55寸的大屏面37安卓手机存监听用户隐患,联发科曝手机芯片漏洞,紧急发放补丁北京时间11月25日消息,安全厂商CheckPoint今天披露,由联发科设计的片上系统音频处理固件存在一处安全漏洞,恶意应用可以秘密将用户手机变成监听工具。CheckPoint估计