广告
返回顶部
首页 > 资讯 > 精选 >怎么使用Try
  • 336
分享到

怎么使用Try

2023-06-15 20:06:28 336人浏览 薄情痞子
摘要

这篇文章主要介绍“怎么使用Try”,在日常操作中,相信很多人在怎么使用Try问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Try”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Java的Option

这篇文章主要介绍“怎么使用Try”,在日常操作中,相信很多人在怎么使用Try问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Try”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Java的Optional非常好用。我们一般使用Optional做非空处理,省去if的处理。主要的目的,就是为了解决Java中臭名昭著的空指针异常。

比如我们在平常的编码中,经常遇到对输入参数的非空判断。

public void getXXX(Map<String, String> params) {     Map<String, String> map = params;     if (map == params) {         map = new HashMap<>();     } }

这种代码一多,我们的程序就会慢慢变成shit mountain。这个时候就可以使用Optional进行改造。

public void getXXX(Map<String, String> params) {     Map<String, String> map = Optional.ofNullable(params).orElse(new HashMap<>()); }

代码行数少了,逻辑清晰,同时自己的绩效也降低了 :)。

1. 复杂例子

看一个比较复杂的例子。

假如我们需要的数据层次比较深。

String cityCode = customer.getAddress().getCity().getCityCode().substring(0,3);

这样获取是不合理的,因为其中的某一环,可能是空,会抛出空指针的。所以,我们需要一层层的进行判断。

public void getCityCode(Customer customer) {     String cityCode = "000";     if (customer != null) {         Address address = customer.getAddress();         if (null != address) {             City city = address.getCity();             if (city != null) {                 String code = city.getCityCode();                 if (null != code && code.length() >= 3) {                     cityCode = code.substring(0, 3);                 }             }         }     }     System.out.println(cityCode); }

使用Optional的lambda语法,我们可以把代码改成下面这样:

public void getCityCode(Customer customer) {     String cityCode = Optional.ofNullable(customer)             .map(c -> c.getAddress())             .map(a -> a.getCity())             .map(c -> c.getCityCode())             .filter(s -> s.length() >= 3)             .map(s -> s.substring(0, 3))             .orElse("000"); }

代码是不是颜值很高?

颜值虽高,下面还是要点一些偏门的重点内容。

2. Optional的隐秘内容

其实,早在Java8发布之前(2014),guava就有了类似的工具,但由于当时并没有lambda语法,所以只能做些简单的应用。

Guava的optional支持序列化,可以在rpc框架方法中返回,但是一般很少用。

Java的Optional却根本无法序列化。为什么java8的Optional没有实现序列化,这里有个讨论,可以看看Http://mail.openjdk.java.net/pipermail/jdk8-dev/2013-September/003186.html

另外Java8比Guava多了ifPresent、map、 filter、 flatMap、 orElseThrow这些方法。鉴于现在使用Guava  Optional的人越来越少,不提也罢。

Optional会对GC有一定压力,如果开发底层框架,还是慎重使用,Netty就曾经过测试,最后放弃了Optional。

但我还是喜欢用。谁让国内大多数都是cruder呢?

3. Try为何物?

长期使用使用Java编码的Javaer,在见了ScalaKotlin一类的语言后,会有一种惊艳的感觉。但这些包实在是太大了,引入有一定的成本,只能眼巴巴的馋她们的身子。

但是,Java 标准库对函数式编程api  支持相对比较有限。有没有一种轻量级的方式,来增强我们的Java库呢?要是能和Lambda表达式结合起来,那就更妙了。Vavr就是这样一个简单的jar包,让我们的代码,写起来更加流畅。

它的Maven坐标是:

<dependency>     <groupId>io.vavr</groupId>     <artifactId>vavr</artifactId>     <version>0.10.3</version> </dependency>

下面是一段伟大的睡眠排序法的代码:

public class SleepSort implements Runnable {     private int num;     public SleepSort(int num) {         this.num = num;     }     @Override     public void run() {         try {             Thread.sleep(num * 10);         } catch (Exception e) {             e.printStackTrace();         }         System.out.print(num + " ");     }     public static void main(String[] args) {         int[] nums = {5, 22, 10, 7, 59, 3, 16, 4, 11, 8, 14, 24, 27, 25, 26, 28, 23, 99};         Arrays.stream(nums).forEach(n->new Thread(new SleepSort(n)).start());     } }

其中的Run部分,太多无用的信息,我们可以使用Try来改造。

我们可以简化为下面两行:

Try.run(()->Thread.sleep(num*10))         .andThen(()->System.out.print(num + " "));

它支持非常多的方法,可以完成大多数后续的业务处理。比如,在onFailure方法里,加入对异常信息的日志记录。

怎么使用Try

而常见的jackson JSON的处理,可以简化成下面的代码:

String json = Try.of(() -> objectMapper.writeValueAsString(str)).getOrElse("{}");

Try就是这么好用。最重要的是,vavr的大小只有800多kb。

4. vavr的更多操作

vavr支持Tuple(元组)、Option、Try、Either、集合便捷操作、多元函数、柯里化方法(curring)等。

可以看一下vavr版本的if else。下面是四个分支的代码。里面这些奇怪的符号,证明它也只是语法糖。

public String vavrMatch(String input) {     return Match(input).of(             Case($("a"), "a1"),             Case($("b"), "b2"),             Case($("c"), "c3"),             Case($(), "unknown")     ); }

再比如,你想要定义一个函数,而不是一个类,在Java中可以使用Function。但可惜的是,Java的Function只支持一个参数。

使用Vavr的Function,最多支持22个参数!

怎么使用Try

再比如,你想要在一个方法中,返回多个值。这个,在python中很容易实现,在Java中就不得不定义一个Class去接收。

元组,就可以支持多个返回值的组合。比如下面的代码:

// (Java, 8) Tuple2<String, Integer> java8 = Tuple.of("Java", 8);   // "Java" String s = java8._1;   // 8 Integer i = java8._2;

vavr支持一次性返回8个值。

怎么使用Try

另外,还有lazy等小工具。比如延迟获取值。

Lazy<Double> lazy = Lazy.of(Math::random); lazy.isEvaluated(); // = false lazy.get();         // = 0.123 (random generated) lazy.isEvaluated(); // = true lazy.get();         // = 0.123 (memoized)

这样的扩展方法有很多。但我最常用的,还是Try和元组。它让代码变的更加优雅,表达意图也更加清晰。

哦对了。resilience4j就重度使用了vavr,就是那个Hystrix不再更新之后,官方推荐的那个熔断组件。

到此,关于“怎么使用Try”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么使用Try

本文链接: https://www.lsjlt.com/news/281463.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用Try
    这篇文章主要介绍“怎么使用Try”,在日常操作中,相信很多人在怎么使用Try问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Try”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Java的Option...
    99+
    2023-06-15
  • 怎么使用Java try和catch
    本篇内容介绍了“怎么使用Java try和catch”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  尽管...
    99+
    2022-10-19
  • try-catch怎么在java中使用
    本篇文章给大家分享的是有关try-catch怎么在java中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面...
    99+
    2023-06-14
  • Python中的try excpet BaseException怎么使用
    这篇文章主要介绍“Python中的try excpet BaseException怎么使用”,在日常操作中,相信很多人在Python中的try excpet BaseException怎么使用问题上存...
    99+
    2023-07-05
  • python中try-except-finally语句怎么使用
    本文小编为大家详细介绍“python中try-except-finally语句怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python中try-except-finally语句怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-06-30
  • php try catch语句怎么用
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑在 PHP 中想要捕获程序中的异常,需要使用 try catch 语句和 throw 关键字来实现。try catch 语句和流程控制语句类似,所以可以通过 try c...
    99+
    2019-06-02
    php try catch
  • Java使用try-with
    在Java编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们。 (推荐学习:java课程)因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编程时确保在正...
    99+
    2016-07-22
    java教程 Java
  • try-except-finally语句怎么在python中使用
    这期内容当中小编将会给大家带来有关try-except-finally语句怎么在python中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java...
    99+
    2023-06-14
  • swift错误处理do catch try try!使用的方法是什么
    这篇“swift错误处理do catch try try!使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获...
    99+
    2023-07-05
  • JavaScript的try和catch语句怎么用
    这篇文章主要讲解了“JavaScript的try和catch语句怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的try和catch...
    99+
    2022-10-19
  • Python中怎么避免滥用try...except
    这篇文章主要讲解了“Python中怎么避免滥用try...except”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中怎么避免滥用try...except”吧!有不少人在写 Py...
    99+
    2023-06-16
  • Java异常处理try catch怎么用
    这篇文章将为大家详细讲解有关Java异常处理try catch怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们编译运行程序出错的时候,编译器就会抛出异常。抛出异常要比终止程序灵活许多,这...
    99+
    2023-06-21
  • python之try except的使用
    1.try-except常用语法: try仅有一块,但是except可以有多个 try: 可能产生异常的代码块except [ (Error1, Error2, ... ) [as e] ]: 处理异常的代码块1except [...
    99+
    2023-10-11
    python
  • 怎么在python中使用try-except方法捕获异常
    这篇文章给大家介绍怎么在python中使用try-except方法捕获异常,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;...
    99+
    2023-06-14
  • java中怎么使用try-with-resource机制关闭连接
    本篇内容主要讲解“java中怎么使用try-with-resource机制关闭连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中怎么使用try-with-resource机制关闭连接”...
    99+
    2023-06-20
  • try-cache-finally读取文件错误try-with-resources使用方法
    目录引言try-cache-finallytry-with-resourcestry-with-resources 语句能放多个资源,使用 ; 分割try-with-resource...
    99+
    2023-02-13
    try-with-resources读取文件 try-cache-finally
  • 写写python中try的使用
    python中try的使用 在 Python 中,try 是用于异常处理的关键字。try 语句的语法如下: try: # 可能会抛出异常的语句块except ExceptionType1: ...
    99+
    2023-09-20
    python java 前端
  • java中try 与catch的使用
    try{ //代码区 }catch(Exception e){ //异常处理 } 代码区如果有错误,就会返回所写异常的处理。   首先要清楚,如果没有try的话,出现异常会导致程序崩溃。 而try则可以保证程序的正常运行下去,比如说: tr...
    99+
    2023-09-09
    java jvm servlet
  • python try-except怎么捕获异常
    这篇文章主要介绍“python try-except怎么捕获异常”,在日常操作中,相信很多人在python try-except怎么捕获异常问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python try-...
    99+
    2023-06-30
  • Java try和catch的使用方法
    本篇内容介绍了“Java try和catch的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为防止和处理一个运行时错误,只需要把你所...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作