首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Optional摆脱NPE折磨

背景 在Java中,如果你尝试对null做函数调用,就会引发NullPointerException(NPE),NPE是Java程序开发中最典型异常,对于Java开发者来说,无论你是初出茅庐新人和还工作多年老司机...,NPE经常让他们翻车。...为了避免NPE,他们会加很多if判断语句,使得代码可读性变得很差。 从软件设计角度来看,null本身是没有意义语义,这是一种对缺失变量值错误建模。...对象 map 如果值存在,就对该值执行提供mapping函数调用 flatMap 如果值存在,就对该值执行提供mapping函数调用,返回一个Optional类型值,否则就返回一个空Optional...对象 ifPresent 如果值存在,就执行使用该值方法调用,否则什么也不做 of 将指定值用Optional封装之后返回,如果该值为null,则抛出一个NPE ofNullable 将指定值用Optional

51730

调用 subprocess 小心 shell=True

小心调用 subprocess,避免因 shell=True 而命令行解析错误 Python 中 subprocess 模块可以轻松实现执行外部命令和进程功能。...我们经常会用它来调用一些命令行工具功能。但是在使用 subprocess 调用复杂命令,有一个容易犯但影响比较大错误 - 使用shell=True参数,导致命令行解析错误,子进程执行失败。...举例1 第一次遇到这个问题场景是,我在一个项目中需要使用 Airtest 框架生成测试报告。...总结 综上,调用 subprocess 执行复杂命令,如果不必要,最好避免使用 shell=True。直接传入命令列表,可以最大限度避免命令行解析错误问题。...只有当命令必须由 shell 处理,例如需要变量替换,才使用 shell=True。记录这个教训,在将来调用 subprocess 多加注意,可以避免很多定制错误和调试时间,让代码更稳定。

59620
您找到你想要的搜索结果了吗?
是的
没有找到

Java 是如何优雅地处理NPE问题

前言 对于 Java 开发者来说,null 是一个令人头疼类型,一不小心就会发生 NPE (空指针) 问题。也是 Java 语言为人诟病一个重要原因之一。...在我们消除可恶 NPE 问题之前我们要回顾一下 Java 中 null 概念。 2....这也是我们在没有引用对象上调用方法出现空指针根本原因。大多数情况下 Java 开发者使用 null 是为了表示某种不存在意思。 3....NPE 问题解决 很多时候我们对数据是否存在有自己期望,但是这种期望并不能直接被我们掌控,一个返回值为 null 所表达意思并不明确过于模糊,往往通过是否判断为 null 来规避空指针问题。...Java 8 中 Optional Java 8 中 Optional 是一个可选值包装类。它意义不仅仅帮我们简化了 NPE 问题处理,同时也是 Java 函数式编程一个重要辅助。

2K22

简单 HTTP 调用,为什么延这么大?

由于工作原因,调用耗时问题,对我来说,已经见怪不怪了,经常会帮业务解决内部 RPC 框架调用超时相关问题,但是 HTTP 调用耗时第一次遇到。不过,排查问题套路是一样。...不过本地确实也是存在问题,因为ping 延是 26ms,后端 HTTP 服务逻辑简单,几乎不耗时,因此本地调用平均耗时应该在 26ms 左右,为什么是 55ms?...为什么加了 TCP_NODELAY ,延就从 39.2ms 降低到 2.8ms? 为什么本地测试平均延是 55ms,而不是 ping 延 26ms? TCP 协议究竟是怎么发送数据包?...但是本地复现时,为什么本地测试平均延是 55ms,而不是 ping 延 26ms?我们也来抓个包吧。...总结 本文是从一个简单 HTTP 调用延比较大而引发一次问题排查过程。过程中,首先由外而内分析了相关问题,然后定位问题并验证解决方案。

1.7K50

简单 HTTP 调用,为什么延这么大?

由于工作原因,调用耗时问题,对我来说,已经见怪不怪了,经常会帮业务解决内部 RPC 框架调用超时相关问题,但是 HTTP 调用耗时第一次遇到。不过,排查问题套路是一样。...不过本地确实也是存在问题,因为ping 延是 26ms,后端 HTTP 服务逻辑简单,几乎不耗时,因此本地调用平均耗时应该在 26ms 左右,为什么是 55ms?...为什么加了 TCP_NODELAY ,延就从 39.2ms 降低到 2.8ms? 为什么本地测试平均延是 55ms,而不是 ping 延 26ms? TCP 协议究竟是怎么发送数据包?...但是本地复现时,为什么本地测试平均延是 55ms,而不是 ping 延 26ms?我们也来抓个包吧。...总结 本文是从一个简单 HTTP 调用延比较大而引发一次问题排查过程。过程中,首先由外而内分析了相关问题,然后定位问题并验证解决方案。

1.2K30

调用函数,关于传参那些事~

实参:在函数调用时,传入函数值叫做实参。 形参:形参出现在 函数定义 中,在整个函数体内都可以使用, 离开该函数则不能使用。...最重要是:当实参传递给形参时候,形参只是实参一份临时拷贝,通过改变形参不能使实参发生改变!!! ---- 二、函数调用处理 1.传值 看到传值,那么就是调用函数实参是具体值。...2.传址 看到传址,那么就是调用函数实参是变量地址。...所以,只有调用函数,函数要改变实参时候,才需要传址过去。...---- 二、传参,实参为数组arr[ ]情况 当实参需要把整个数组传给形参,因为形参是实参一份临时拷贝,如果数组较大,会占据大量空间资源。

1.4K20

Lua调用C++打印堆栈信息

公司手游项目,使用是基于cocos2d-x绑lua解决方案(参数quick-x绑定),虽然使用了lua进行开发,更新很爽了,但是崩溃依然较为严重,从后台查看崩溃日志,基本上只能靠“猜”来复现bug...更为郁闷是很多时候并没有使用log输出,在崩溃日志里还无法查看大概在哪一步操作崩溃… 后来在网上搜索了一下,受到一点启发,lua代码在执行时候可随时调用debug.traceback()方法来获得调用字符串信息...而c++导出方法给lua调用,是使用tolua++工具实现,通过ant实现将多个pkg文件生成一个cpp文件。...所以只能在antbuild.xml配置中想办法了,好在ant本身就支持正则任务“ReplaceRegExp”,在调用方法前面添加打印堆栈方法即可。...C++函数崩溃,查看lua调用栈信息 (特别适用于tolua++) cocos2d-x集成lua 导出 C/C++ API 给 Lua 使用 build.xml示例 Ant-Tasks

2.8K20

浅谈python 调用open()打开文件路径出错原因

‘\’ 是转义符号,要想输出\ 办法有两种 1 、在\后再加\ 就是\\ 形式 把第二行改为infile =open(“C:\\Users\\Spirit\\Desktop\\bc.txt”,’r’...eg: infile =open(r”C:\Users\Spirit\Desktop\bc.txt”,’r’) 好 文件就可以读取了!...补充知识:Python 使用控制台运行带有相对路径指令,是以运行文件为基准,还是以控制台当前路径为基准 答案:以控制台当前路径为基准 如,运行: python scripts/voc_annotation.py.../VOC 这条指令,后面的相对路径是以scripts文件夹为基准路径运行指令,而不是以voc_annotation.py为基准,所以CMD当前路径必须是scripts文件夹 以上这篇浅谈python...调用open()打开文件路径出错原因就是小编分享给大家全部内容了,希望能给大家一个参考。

1.8K10

Android 中解决Viewpage调用notifyDataSetChanged()界面无刷新问题

Android 中解决Viewpage调用notifyDataSetChanged()界面无刷新问题 问题描述 相信很多做过Viewpager的人肯定遇到过这个问题,这个是bug还是Android就是如此设计...总之,它确实影响我们功能实现了。 可能不少同学选择为Viewpager重新设置一遍适配器adapter,达到刷新目的。但是这种方法在大多数情况下,是有问题。...解决办法 以我们可以尝试着修改适配器写法,覆盖getItemPosition()方法,当调用notifyDataSetChanged,让getItemPosition方法人为返回POSITION_NONE...,从而达到强迫viewpager重绘所有item目的。...} return super.getItemPosition(object); } } 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站支持

1.6K21

调用wx.request接口需要注意几个问题

现在项目已经完成,还是要陆陆续续总结一下,总结过程也是对知识梳理和清晰过程!...2)对于接口调用http和https问题 对于这一个问题,在之前来说,微信公共平台支持使用http测试项目,但是正式发布需要使用https域名, 但是前几天看到了微信公众平台发一则公告: 应该是要封杀...http方式调用了,公告链接:为保证数据传输安全,提高业务安全性,公众平台将不再支持HTTP方式调用(时间2017年9月21日) 3)关于method以及data数据 微信小程序多地方都严格区分大小写,...所以要注意methodvalue需要为大写,request默认超时时间都是60s; 对于data数据,上次我们从接口中拿到数据是json格式,最终发送给服务器数据是String类型,如果传入...POST请求中不好使了,content-type 默认为 'application/json';  所以使用post请求,将content-type设置为 application/x-www-form-urlencoded

2.8K110

Windows和Linux 导入java https调用接口受信任证书

Administrator\Desktop\湖南\dzswj.cer -storepass changeit -keystore cacerts     注:-alias 证书别名        -file 要导入证书目录位置...       -storepass jdk默认密码        -keystore cacerts此处是jdk证书存放文件,无需更改 3.上一步命令制定完会出现 是否信任此证书?...sxdzswj -file /www/dzswj.cer -storepass changeit -keystore cacerts 1.查看某个证书,注grep 后面的 sxdzswj 即为上面导入证书别名...keytool -list -keystore cacerts | grep sxdzswj 2.查看目前环境下证书 keytool -list -keystore cacerts 3....删除某个已安装证书 sxdjswj :即为上面导入证书别名 keytool -delete -alias sxdzswj -keystore cacerts

1.6K10

调用外部api数据一致性问题

事务一致性需要由原子性来保证,即对于一系列操作,要么全部成功,要么全部失败回滚,以上述例子而言,账户金额扣除发生异常,之前写操作就要全部回滚,恢复到执行前状态,这个大部分数据库都提供支持,我们平时只需要借助...数据库事务与隔离级别 全面分析 Spring 编程式事务管理及声明式事务管理 ThreadLocal与Spring 事务管理 然而,并不是每一步操作都可以借助数据库事务机制保持数据一致性,有时候我们常常要调用开放平台...api接口,比如一些第三方卖家管理软件有时候会帮助淘宝卖家进行一些自动上下架操作,这些操作全部是通过定时调用淘宝开放给开发者自动上下架api进行,因为后续有新待操作商品加入,所以调用会每隔几个小时进行一次...,调用返回正确结果后再修改本地数据库相关状态,一个比较直观过程是这样: // 该方法开启事务 传播属性为REQUIRED public void shelveOperation(...后更新本地状态 } }else if(状态为失败){ // 访问api后更新本地状态 } } 在编写业务逻辑代码

5.8K81
领券