bootstrap样式异常_处理异常功能样式

bootstrap样式异常

Java从一开始就支持检查异常。 在Java 8中,语言元素lambda和支持流操作的RT库修改将功能编程风格引入了该语言。 函数样式和异常并不是真正的好朋友。 在本文中,我将描述一个简单的库,该库在某种程度上类似于使用Optional处理null方式处理异常。

该库有效(毕竟它是单个类和一些内部类,但实际上不是很多)。 另一方面,我不是绝对确定使用该库不会降低普通程序员的编程风格。 有人用锤子把所有东西都看成是钉子,这可能会发生。 锤子不是很好的修脚工具。 看看这个库更像是一个主意,而不是作为一个最终的工具来告诉您如何创建完美的代码处理异常。

处理检查的异常

已检查的异常必须像感冒一样被声明或捕获。 这是与null的主要区别。 评估表达式可以静默为null但不能静默引发已检查的异常。 当结果为null我们可以使用它来表示没有值,或者我们可以检查并使用“默认”值代替null 。 这样做的代码模式是

 var x = expression;  if ( expression == null ){ x = expression that is really never null default expression that is really never  } 

模式表达式是相同的,尽管Java语法略有不同,但表达式的求值可以引发检查的异常:

 Type x; // you cannot use 'var' here  try { x = expression  } catch (Exception weHardlyEverUseThisValue){ x = expression that does not throw exception default expression that does not  } 

如果第二个表达式也可以为null或可能引发异常,则结构可能更复杂,并且如果第一个表达式失败,我们需要第三个表达式甚至更多个表达式进行评估。 由于许多括号,在抛出异常的情况下,这尤其顽皮

 Type x; // you cannot use 'var' here  try { try { x = expression1 } catch (Exception e){ try { x = expression2 } catch (Exception e){ try { x = expression3 } catch (Exception e){ x = expression4 }}}} catch (Exception e){ x = expression that does not throw exception default expression that does not  } 

对于null处理,我们有Optional 。 解决百万美元的问题并不是完美的,这是设计一种既没null又被低估的语言的名称,但是如果使用得当,它会使生活变得更好。 (更糟糕的是,如果使用错误的方式,您可以随意地说,我在本文中所描述的正是这种方式。)

如果结果表达式为null ,则可以编写

 var x = Optional.ofNullable(expresssion) .orElse( expression that does not throw exception); default expression that does not exception); 

你也可以写

 var x = Optional.ofNullable(expresssion1)  .or( () -> Optional.ofNullable(expression2))  .or( () -> Optional.ofNullable(expression3))  .or( () -> Optional.ofNullable(expression4))  ...  .orElse( expression that does not throw exception); default expression that does not exception); 

当您有很多选择的价值。 但是,如果表达式引发异常,则您不能做同样的事情。 可以吗

极好的

Exceptional ( https://github.com/verhas/exceptional )

 < groupId >com.javax0</ groupId >  < artifactId >exceptional</ artifactId >  < version >1.0.0</ version > 

实现了在Optional实现的所有方法,一个或多个实现了某些方法,并且某些方法的目的有所不同,旨在在异常情况下使用相同的方式,如上面针对null值的Optional

您可以使用Exceptional.of()Exceptional.ofNullable()创建一个Exceptional值。 重要的区别在于,论点不是价值,而是提供价值的供应商。 该供应商不是JDK Supplier因为该Supplier无法引发异常,因此整个库将无用。 此供应商必须是Exceptional.ThrowingSupplier ,它与JDK Supplier完全相同,但get()方法可能会抛出Exception 。 (另请注意,只有一个Exception ,而不是Throwable正如你用裸手搭上了烧红的铁球,你应该只捕捉尽可能频繁。)

在这种情况下,您可以写的是

 var x = Exceptional.of(() -> expression) // you CAN use 'var' here .orElse( expression that does not throw exception); default expression that does not exception); 

它越来越短,通常更易读。 (或者不是?这就是为什么APL如此受欢迎?或者是?您问什么是APL?)

如果您有多种选择,可以写

 var x = Exceptional.of(() -> expression1) // you CAN use 'var' here .or(() -> expression2) .or(() -> expression3) // these are also ThrowingSupplier expressions .or(() -> expression4)  ... .orElse( expression that does not throw exception); default expression that does not exception); 

如果某些供应商可能会导致null不仅引发异常,则有方法的ofNullable()orNullable()变体。 ( orNullable()Optional中不存在,但在这里,如果整个库都可以使用,则是有意义的。)

如果您熟悉Optional并使用更高级的方法,例如ifPresent()ifPresentOrElse()orElseThrow()stream()map()flatMap()filter()那么使用Exceptional并不困难。 类中存在具有相同名称的类似方法。 再次不同的是,如果Optional的方法的参数为Function ,则为Exceptional时为ThrowingFunction 。 利用这种可能性,您可以编写如下代码

 private int getEvenAfterOdd( int i) throws Exception { if ( i % 2 == 0 ){ throw new Exception(); } return 1 ; } @Test @DisplayName ( "some odd example" ) void testToString() { Assertions.assertEquals( "1" , Exceptional.of(() -> getEvenAfterOdd( 1 )) .map(i -> getEvenAfterOdd(i+ 1 )) .or( () -> getEvenAfterOdd( 1 )) .map(i -> i.toString()).orElse( "something" ) ); } 

也可以像下面的示例一样处理函数表达式中的异常:

 private int getEvenAfterOdd( int i) throws Exception { if (i % 2 == 0 ) { throw new Exception(); } return 1 ; } @Test void avoidExceptionsForSuppliers() { Assertions.assertEquals( 14 , ( int ) Optional.of( ).map(i -> 13 ).map(i -> Exceptional.of(() -> inc(i)) .orElse( 0 )).orElse( 15 )); } 

最后但并非最不重要的一点是,您可以模仿?. Groovy写作的运营商

 abcdef 

表达式(其中所有变量/字段都可能为null并通过它们访问下一个字段)会导致NPE。 您可以但是写

 var x = Exceptional.ofNullable( () -> abcdef).orElse( null ); 

摘要

记得我告诉过你有关锤子的事。 小心使用,并获得更大的利益。

翻译自: https://www.javacodegeeks.com/2019/05/handling-exceptions-functional-style.html

bootstrap样式异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无线鼠标可以强制配对_赛睿Rival 3 Wireless游戏鼠标评测:无限全能

近两年&#xff0c;外设无线技术日渐成熟&#xff0c;也让无线外设产品出现了爆发式增长。随着无线外设产品开始在职业赛场上崭露头角&#xff0c;让越来越多的用户更加青睐便利性与体验感极佳的无线外设产品。赛睿作为老牌外设厂商&#xff0c;在2018年就推出了采用双传感器并…

clear nTotal nNum=1计算机考试,信息学奥赛常考算法——模拟法

★模拟法有些问题的描述和解决方法已经很清楚&#xff0c;只需要按照描述去一步一步的执行即可&#xff0c;这种方法就是计算机解决问题的一种最普遍最直接的方法------模拟法。模拟法并不是程序&#xff0c;只是我们依赖计算机的运算速度解决问题的一种方法或模式&#xff0c;…

junit 测试目录_JUnit 5测试中的临时目录

junit 测试目录JUnit 4 TemporaryFolder Rule允许开发人员使用临时目录创建测试。 使用JUnit 5时&#xff0c;不支持Rule因此测试文件和目录需要一点点额外的工作。 幸运的是&#xff0c;有了JUnit 5.4&#xff0c;有一个新的内置扩展可以处理测试中的临时目录。 而且它非常易于…

IntelliJ IDEA内置Maven的settings.xml文件在哪里?

IDEA 内置的 Maven 没有 settings.xml 文件&#xff0c;如果你自己不安装 Maven&#xff0c;而你又想设置 Maven 的资源仓库&#xff0c;你要怎么做呢&#xff1f; 参见&#xff1a;https://blog.csdn.net/Li_Ya_Fei/article/details/104432073

java生成唯一有序序列号_分布式唯一 ID 之 Snowflake 算法

SegmentFault 社区专栏&#xff1a;全栈修仙之路作者&#xff1a;semlinkerNo.1Snowflake 简介1.1 什么是 SnowflakeSnowflake is a service used to generate unique IDs for objects within Twitter (Tweets, Direct Messages, Users, Collections, Lists etc.). These IDs a…

冀教版五年级计算机教学计划,冀教版五年级上册教学计划资料

现状分析:五年级两个班现有学生四十余人,基本为我校四年级直升学生.已学习了北师大版《语文》五年级上册和冀教版《语文》五年级下册.目前普遍情况是听、写的能力尚可,读和说的能力有待提高.一班学生基础知识较为扎实,但缺乏变通性,学习较为用功,但成绩不佳&#xff1b;二班学生…

spring缓存_有关Spring缓存性能的更多信息

spring缓存这是我们最后一篇关于Spring的缓存抽象的文章的后续文章 。 作为工程师&#xff0c;您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验。 了解工具的行为有助于您在做出设计选择时变得更加成熟。 在本文中&#xff0c;我们描述了基准测试实验和结果&#x…

提交构件到Maven的远程中央仓

参见&#xff1a;https://central.sonatype.org/publish/publish-guide/

ctrl导致开机弹出计算机,Win7系统开机黑屏提示Press Ctrl+Alt+Del to restart如何解决...

在使用win7系统的时候&#xff0c;难免会遇到各种各样的问题&#xff0c;比如最近有雨林木风win7旗舰版系统用户反映说开机黑屏&#xff0c;并提示Press CtrlAltDelto restart&#xff0c;该怎么解决这样的问题呢&#xff0c;现在给大家分享一下Win7系统开机黑屏提示PressCtrlA…

rxjava背压怎样使用_使用MicroProfile应用隔板和背压

rxjava背压怎样使用我录制了一段视频&#xff0c;介绍如何使用MicroProfile Fault Tolerance实现隔板和背压。 隔板后面的想法是将应用程序分成几个隔离功能的执行单元。 在企业Java应用程序中&#xff0c;这通常意味着定义多个线程池。 向客户端施加背压会导致向客户端添加有…

单片机蜂鸣器编程音乐_基于单片机的智能鱼缸温控系统设计

曹益豪聊城大学东昌学院机电工程系山东 聊城 252000摘 要&#xff1a;为满足热带鱼的饲养要求&#xff0c;设计了一种基于AT89C52单片机的小型智能温控鱼缸系统。该系统利用DS18B20传感器检测水温&#xff0c;并通过测量温度与设定温度的对比控制加热装置的通断。现详细介绍了…

计算机快捷键 还原默认值,CAD默认快捷键如何恢复?教你还原CAD默认配置的方法...

小编告诉大家AutoCAD的操作命令和各种设置分为默认和自定义。 可以根据每个人的喜好进行设置。 不必完全遵循该软件的默认操作&#xff0c;只是因为此快捷键是可变的&#xff0c;所以我仍然不习惯更改我的个人操作&#xff0c;并且想要恢复为默认设置&#xff0c;我们如何还原它…

java开发指南_Java 12新功能完整指南

java开发指南六个月飞得如此之快&#xff0c;是时候再次仔细研究一下即将发布的新JDK版本。 让我们满足Java 12及其向开发人员介绍的功能。 自Oracle推出加速六个月的发布节奏以来已经有一段时间了&#xff0c;要跟上每个版本及其添加到表中的功能越来越难了。 从好的方面来看…

python语句join_Python中的join()函数的用法

函数&#xff1a;string.join() Python中有join()和os.path.join()两个函数&#xff0c;具体作用如下&#xff1a; join()&#xff1a;连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.join()&#xff1a;将多个路径组合后返…

怎么升级计算机内存容量,如何升级电脑内存?给电脑内存升级的操作步骤

电脑内存是用来作为临时存储数据设备使用的&#xff0c;如果内存占用率高&#xff0c;会让电脑运行负荷。喜欢玩游戏的人对电脑内存要求都比较高。很多玩家在购机时内存选择并不大&#xff0c;一般都是标配8G及以下&#xff0c;那么如何升级电脑内存&#xff1f;下面就和大家一…

搜索Maven依赖资源/搜索Maven工件/搜索Maven构件/搜索依赖/搜索构件/搜索工件/下载依赖/依赖下载

文章目录依赖索引索引文件更新存放在本地的远程仓库的资源索引以及本地仓库的资源索引macOS 下索引文件的路径在 pom.xml 页面内按快捷键 ⌘N 搜索构件在资源库管理中&#xff0c;创建资源库时&#xff0c;选择 From Maven 来搜索构件通过 Maven 构件资源网站搜索依赖索引 如果…

在Selenium中按TagName定位元素

Selenium定位器是处理网页上的元素时的关键。 从ID&#xff0c;名称&#xff0c;类&#xff0c;标记名&#xff0c;XPath&#xff0c;CSS选择器等定位器列表中&#xff0c;可以根据需要选择其中任何一种&#xff0c;然后在网页上找到Web元素。 由于与tagName或linktext相比&…

python open读取_python,一读取文件open()

在实际操作中&#xff0c;我们经常会读取文件&#xff0c;这个时候python为我们提供了一个open()的方法&#xff0c;供我们读取文件&#xff0c;通过help(open)&#xff0c;我们可以获取open的方法 f.close()关闭读取 f.read(size-1)读取文件size个字符&#xff0c;但未给size赋…