城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

trycatch居然可以隐藏?让我们用函数式接口来实现吧

5月1日 失了心投稿
  写在前面很早写的一篇文章,这里分享给小伙伴。在项目中,我们会遇到异常处理,对于运行时异常,需要我们自己判断处理。对于受检异常,需要我们主动处理。主动处理中繁琐的try{}caht嵌套在代码里,看着很不舒服这里我们不讨论性能,就代码来讲,来看看如何将他隐藏起来。原理是不变的。变得是写法。下面我们来看如何优雅的处理异常块。
  傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。王小波在这之前,你需要知道以下几个概念:行为参数化:
  是java8提出的,函数式编程的一种思想,通过把代码包装为参数传递行为,即把代码逻辑包装为一个参数,传到方法里。Lambda表达式
  java8提出:Lambda表达式理解为简洁的表示可传递的匿名函数的一种方式,它没有名称,但它有函数体,参数列表,返回类型。可以抛出一个异常类型。包装代码逻辑为参数即使用Lambda表达式。函数式接口:
  本质上是只有一个抽象方法的普通接口,可以被隐式的转换为Lambda表达式,需要用注解定义(FunctionalInterface)。
  这里需要注意一点默认方法和静态方法虽然不属于抽象方法,但是可以在函数式接口中定义。FunctionalInterfacepublicinterfaceObjectMethodFunctionalInterface{voidcount(inti);StringtoString();sametoObject。toStringinthashCode();sametoObject。hashCodebooleanequals(Objectobj);sametoObject。equals}
  如果函数式接口中额外定义多个抽象方法,那么这些抽象方法签名必须和Object的public方法一样,接口最终有确定的类实现,而类的最终父类是Object。因此函数式接口可以定义Object的public方法。
  即行为参数化是指导思想,Lambda表达式是表达方式,函数式接口是实现手法如何隐藏C?clazzClass。forName(类名);
  这句代码想来小伙伴都不陌生。这是一个受检异常,需要抛出一个ClassNotFoundException。正常的写法:try{C?clazzOldClass。forName(类名);}catch(ClassNotFoundExceptione){e。printStackTrace();}隐藏之后的写法:C?clazzNewclassFind(oClass。forName(o),类名);
  嗯,我们来看具体的实现:很简单,我们要做的,即把C?clazzClass。forName(类名);当做一种行为去处理,接受一个String,得到一个Class,所以我们要定义一个函数接口,描述这种行为,这种行为本身是需要处理受检异常的。Auther:LiruilongDate:202072915:50Description:由函数名获取元类Class实例函数签名:StringClassFunctionalInterfacepublicinterfaceClassFindInterface{C?classNametoClass(StringclassName)throwsClassNotFoundE}
  这里,因为我们的行为需要抛出异常。所以在接口里也抛出异常。
  然后,我们需要定义一个方法,将我们的行为作为参数传进去,同时,捕获一下我们的异常。publicClassclassFind(ClassFindInterfaceclassFindInterface,StringclassName){C?try{clazzclassFindInterface。classNametoClass(className);}catch(ClassNotFoundExceptione){logger4j。error(。。。、e。getMessage());e。printStackTrace();}}
  然后,我们可以调用我们的方法classFind方法,C?clazzNewclassFind(oClass。forName(o),类名);
  当然。其实这种思想并不简单的可以做捕获异常的处理,我们来看一个Demo
  文本文件转换为字符串:
  在我看来;将文本文件转换为字符串,我们需要使用高级流包装低级流,然后做缓存读出来。这里,我们不可避免的会遇到异常处理,流的关闭等操作,下面我们将这些代码都异常起来。专心写读的逻辑即可。
  我的思路:
  我对javaIO用的不是很熟,大家有好的方法请留言,相互学习:FileInputStreamfileInputStreamnewFileInputStream(file))InputStreamReaderinputStreamReadernewInputStreamReader(fileInputStream))BufferedReaderbufferedReadernewBufferedReader(inputStreamReader))StringstrbufferedReader。readLine()
  字节流》字符流》字符缓存流即将字节流转换为字符流之后在用高级流包装。
  所以我的思路是避免在逻辑里出现太多的IO流关闭,和异常捕获,专心处理读取逻辑即可,结合以下两种技术:try(){}【自动关闭流,1。7支持】lambda特性来实现【行为参数化,1。8】
  描述一个行为,BufferReaderStringpackagecom。liruilong。demotext。service。utils。importjava。io。BufferedRimportjava。io。IOEDescription:函数接口,描述BufferedReaderString的转化方式Author:LiruilongDate:202031715:44FunctionalInterfacepublicinterfaceInputStreamPeocess{AuthorLiruilongDescription方法签名BufferedReaderStringDate15:472020317Param〔inputStream〕returncom。liruilong。demotext。service。utils。InputStreamStringpeocess(BufferedReaderbufferedReader)throwsIOE}
  执一个行为,嵌入到定式里,任何BufferReaderString的Lambda表达式都可以作为参数传入。只要符合peocess方法的签名即可。returnjava。lang。StringAuthorLiruilongDescription环绕处理Date17:142020317Param〔inputStreamPeocess,file〕publicstaticStringfileToBufferedReader(InputStreamPeocessinputStreamPeocess,Filefile){try(FileInputStreamfileInputStreamnewFileInputStream(file)){try(InputStreamReaderinputStreamReadernewInputStreamReader(fileInputStream)){try(BufferedReaderbufferedReadernewBufferedReader(inputStreamReader)){resoultinputStreamPeocess。peocess(bufferedReader);}}}catch(IOExceptione){e。printStackTrace();}finally{}}
  如何使用这个定义好的行为returnjava。lang。StringAuthorLiruilongDescription文件转字符串Date17:222020317Param〔file〕publicstaticStringreadJsonToString(Filefile){returnfileToBufferedReader((bufferedReader){SStringBuilderstringBuildernewStringBuilder();while((strbufferedReader。readLine())!null){stringBuilder。append(str);}returnstringBuilder。toString();},file);}
  关于Java中try{}catch的隐藏就和小伙伴分享到这里
搜索 投诉 评论 转载

trycatch居然可以隐藏?让我们用函数式接口来实现吧写在前面很早写的一篇文章,这里分享给小伙伴。在项目中,我们会遇到异常处理,对于运行时异常,需要我们自己判断处理。对于受检异常,需要我们主动处理。主动处理中繁琐的try{}cah……移动把我的号码直接停了,打10086说我的号码违规,也不说什应邀回答本行业问题。关于号码的停机问题,这是多个部门联合整体骚扰电话的结果,很大程度上可以说并不是运营商的问题。2018年,13个部委联合开展了关于骚扰电话的联合整治专项……第二章生物的产生在最近的50年,科学家对地球的年龄和起源这两方面作了一些有价值和有趣的推测。由于这些推测包涵着深奥的数学和物理上的问题,所以我们在此不能加以概括性的描述。事实上,如今的天文学和……京东发布禁售游戏公告,名单包含动森在内等87款游戏昨日京东发布关于禁售游戏的公告,公告中含概87款游戏,名单包含《集合啦!动物森友会》《最后生还者:第二部》《超级马力欧制造2》等。此后未经审批备案的游戏不得在京东商城出售,对此……为什么闲鱼上的一些车卖得好便宜?本着对性价比和省钱的出发点来说的话,二手车也是一种不错的选择,二手车购买的渠道有很多种,一些比较大型的是城市中的二手车市场,还有线上的如一些二手车交易平台等等。不同的渠道找到的……智能社会已经悄悄的来到,我们的智能手机,大家知道它的作用吗?假设阿里为了击败腾讯,帮人民建设一个全民所有制的新社交平台,人民会自然从微信来到这个新平台,这个新平台每天可以产生上亿的广告费,人民用这个利润再投资,可以创生人民的新零售平台,……现货不用抢,骁龙870一亿像素50倍变焦144Hz屏,128了解行业规则的都知道,一般来说,性价比高的产品,开售初期往往会出现一机难求的问题,尤其是售价亲民的标准版,开售初期标准版往往需要抢购。比如红米K40、真我GTNeo等等。而且这……微软创始人比尔盖茨的IP属地在河南,炸出了一堆小丑ip属地开放公示后,不少东西都可以让我们一眼看到本质了。不得不说这个过程还是挺有趣的,现在,我们来一起看看一些海外知名企业家在中国互联网上的IP属地,这让不少人都炸了锅。……饱和式投入千人百亿,哪吒汽车自主研发上再出大动作近日,哪吒汽车联合创始人兼首席执行官张勇在接受媒体采访时表示,哪吒汽车正有序推进自主研发进度,打造智能科技的核心竞争力。同时,在深度自研的基础上,与华为、地平线等智能化领军企业……土豪请认准激光电视家庭用户大屏选购指南投影显示设备可以轻松呈现大尺寸屏幕,同时也更加健康护眼,是居家追剧的理想选择。但从智能投影到激光电视,不同投影产品的性能与价格也是天差地别。依据价格,我大致将产品划分为新兴智能……一种生物只有一套染色体基数?我科研人员发现桑树有两套染色体基新华社重庆2月10日电(记者柯高阳)桑树是重要的生态和经济树种。我国科研人员最新研究发现,染色体的融合断裂使得桑树拥有两套染色体基数。这项研究打破了以往一种生物只有一套染色体基……中国回避了没有人预见到的加密货币灾难1。最近加密货币市场陷入了低迷,爆仓无数,号称稳定币的Luna币归零,沉重打击了市场。2。查理芒格早先评论说,中国规避了加密货币在本国使用,这让我们看起来很愚蠢。随着市场……
泸州老窖中国电信纷纷成立私募股权基金腾讯投了字节的关联餐饮公羡慕鸿蒙?苹果用户别着急,iOS15马上就来,UI设计大变化销售人员可以查到企业老板电话的软件或者网站有哪些?南方科技大学校园风光关于整容的一点看法聊一款入门级的一线品牌游戏本骨传导与动圈双模式设计,DacomG100运动蓝牙耳机骨传导耳机是智商税?斥巨资1000多买了个南卡,聊聊具体使用效果很明显!极客用铜垫片替代导热垫,显存从110度降低至64频繁使用花呗借呗微粒贷京东白条会影响在银行的信用吗?高瓴创投再出手领投流程挖掘企业望繁信科技外观设计提升小米12Ultra曝光,小米11堪比乞丐低价,加
漳州港人春节期间快艇航班安排新鲜出炉!亲戚朋友一大圈,三种亲友不能走道德经第四十六章注音版道德经第四十六章拼音版200字有关雾霾的作文我眼中的雾霾33岁景甜和34岁赵丽颖同穿粉色抹胸裙,风格差距太明显和你在一起,我很高兴经典语录皮克当年为什么离开了曼联?水电安装合同行业利好频出,牧原股份五天大涨20。46!猪企的投资机会来了励志电影十佳武侠片无限屏来了!三星发布20204K8KQLED电视产品线山楂有没有减肥的效果山楂有助于消化吗

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁