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

小谈 Kotlin 空处理

在我看来,Kotlin 没有帮开发者解决了 NPE (Kotlin: 臣妾真的做不到啊),而是通过语言层面增加各种强规则,强制开发者去自己处理可能空指针问题,达到尽量减少(只能减少而无法完全避免)出现...三、强规则之下 NPE 问题 Kotlin 这么严密防御之下,NPE 问题是否已经被终结了呢?答案当然是否定。...实践过程中我们发现主要有以下几种容易导致 NPE 场景: 1. data class(含义对应 Java 中 model)声明了非空 例如从后端拿 json 数据场景,后端哪个字段可能会传空是客户端无法控制...可以很方便得“可空”转为“非空”,但可空变量值为 null,则会 crash。 因此使用上建议确保非空时才用 !!: param!! 否则还是尽量放在判空代码块里: param?....两个代码块对象不同 以 let 为例, let 代码块里可以用 it 指代该对象(其他高阶函数可能用 this,类似的),那么我们写如下代码时可能会顺手这样写: activity {

85510

阿里华为等大厂架构师如何解决空指针问题

NPE事发场景 参数是Integer等包装类,自动拆箱时 字符串比较 如ConcurrentHashMap这种不支持K.V为null容器 A对象含B对象,通过A对象字段获得B对象后,没有判空B就调用...设置个断点看下入参不就知道了吗? 但在实际项目中,NPE通常在极其特殊条件下才会出现,自测时一般都难以复现。...中使用JSON传过来User对象通过JPA更新到数据库中,最后返回保存到数据库数据 首先,DB初始化一个用户,age=36、name=zhuye、create_date=2020年1月...NPE原因 DTO字段null含义 JSON到DTO反序列化过程,null描述有歧义: 客户端不传某个属性或传null,该属性DTO中都是null。...为测试使用Optional是否可以有效区分JSON中没传属性还是传了null,JSON中设个nullage,结果是正确得到了年龄不能为空错误提示: curl -H "Content-Type:application

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

向面试官讲解了单例模式,他对竖起了大拇指

JVM 中会经过三步: (1)为 singleton 分配内存空间 (2)初始化 singleton 对象 (3) singleton 指向分配好内存空间 指令重排序是指:JVM 保证最终结果正确情况下...,这样多线程环境下就不会发生 NPE 异常了。...oos = new ObjectOutputStream(new FileOutputStream("Singleton.file")); // 单例对象写到文件中 oos.writeObject...防止反序列化创建多个枚举对象读入 Singleton 对象时,每个枚举类型和枚举名字都是唯一,所以序列化时,仅仅只是对枚举类型和变量名输出到文件中,在读入文件反序列化成对象时,使用 Enum...所以,序列化和反序列化过程中,只是写出和读入了枚举类型和名字,没有任何关于对象操作。 ?

55420

美团一面:为什么线程崩溃崩溃不会导致 JVM 崩溃

大家好,是坤哥 网上看到一个很有意思美团面试题:为什么线程崩溃崩溃不会导致 JVM 崩溃,这个问题看了不少回答,但发现都没答到根上,所以决定答一答,相信大家看完肯定会有收获,本文分以下几节来探讨.../openjdk-jdk8u,有兴趣可以下载来看看 我们只要研究 Linux 下 JVM,为了便于说明,也方便大家查阅,把其中关于信号处理关键流程整理了下(忽略其中次要代码) 可以看到,启动...和 NPE,这就是为什么 JVM 不会崩溃且我们能捕获这两个错误/异常原因 如果针对 SIGSEGV 等信号,以上函数中 JVM 没有做额外处理,那么最终会走到 report_and_die...这个方法,这个方法主要做事情是生成 hs_err_pid_xxx.log crash 文件(记录了一些堆栈信息或错误),然后退出 至此相信大家明白了为什么发生了 StackoverflowError...原因其实就是虚拟机内部定义了信号处理函数,而在信号处理函数中对这两者做了额外处理以让 JVM 不崩溃,另一方面也可以看出如果 JVM 不对信号做额外处理,最后会自己退出并产生 crash 文件 hs_err_pid_xxx.log

2K20

《Java 开发手册》解读:三目运算符为何会导致 NPE

本文详细剖析 NPE 出现原因,重新梳理相关知识点,并进一步扩展,帮助大家彻底理解这个问题。 文末福利:下载《Java 开发手册》解读电子书。...但是,并不是所有人都熟知这个规则,所以实际应用中,还会出现以下三种定义方式: //当第二位和第三位表达式都是对象时,表达式返回值也为对象。boolean x4 = flag ?...所以,日常开发中就有可能出现以上 6 种情况。聪明读者们读到这里也一定想到了,以上 6 种情况中,如果是涉及到自动拆箱,一旦对象值为 null,就必然会发生 NPE。...就需要对对象进行拆箱操作,由于该对象为 null,所以拆箱过程中调用 null.booleanValue() 时候就报了 NPE。...之所以会出现这样不同,这个就说来话长了,挑其中重点内容简单介绍下吧,以下内容主要还是围绕 Java 8 JLS 。

1.4K00

如何避免 Java 中“NullPointerException”

本文中,解释这个问题根源并提供解决该问题方法。 2 问题根源:Java 弱类型安全 你听说过编译类型安全吗?如果不在本文中,您可以了解它是什么以及编译时和类型安全之间区别。...Null 值代表所有未初始化对象。而且,只要可以初始化任何对象,就可以 Null 值分配给任何类型。 因此,Java 允许下一个分配: 这里有什么问题?对象未初始化,因此它们指向空引用。...您可以本文中找到有关异常及其性质更多详细信息。 6 为什么 NullPointerException 是最常见异常? 开发人员是人类,总是习惯于忘记一些事情。...因此,他们错过了: 初始化对象 验证对象 没有治愈人性方法,也与它无关。避免NPE实用方法是什么?让我们在下面回顾一个示例并尝试修复它。...不幸是,还没有找到 maven 编译步骤中添加它方法。因此,如果存在,请在评论中告诉,我会对其进行测试并将其添加到文章中。

2.8K20

懵逼...

你好呀,是why。 给大家分享一个小知识点。 之前逛知乎,看到这个问题时候一下都懵逼了。 为什么 return null 时候,程序不会抛出 NPE 呢? 好像有千言万语,又不知从何说起。...Java里,下述操作隐含对引用解引用: 读字段(字节码 getfield):x.y,当x为null时抛NPE; 写字段(字节码 putfield):x.y = z,当x为null时抛NPE。...null时抛NPE; 抛异常(字节码 athrow):throw obj,当obj(throw表达式参数)为null时抛NPE; 用synchronized关键字给对象加锁(字节码 monitorenter...说真的,也认为程序里面引入 return null 不太好,加入这样一行代码后势必会带来一个非空判断,是不太优雅。 还不如抛出一个异常。...而关于这个问题,《阿里巴巴JAVA开发手册》里面是这样描述: 总之,求同存异,目的都是为了防止 NPE 出现。 防止 NPE 是程序员基本修养。

29720

如何用R语言从网上读取多样格式数据

: url:文件所在地址 destfile:下载后文件保存地址,默认为工作目录 method: 提供"internal", "wget", "curl" 和 "lynx"四种method,windows...使用getwd获取当前工作路径,setwd可以改变它 读入XML XML可以说是我们非常熟悉一类数据。我们通常在网上看到电子表格便是XML文件一部分。我们可以看到XML文件大抵是长这样. ?...关于XML这种可扩展性标记语言,我们不再赘述,可以参阅wiki.这里我们关注得到XML文件后如何分析处理。 R提供了XML包供我们来读取这样一个文件。...我们以githubAPI数据为例,下面是github代码仓库部分数据json格式信息,完整版本在这里 { "id": 20472818, "name": "courses",...我们不仅可以读入JSON数据也可以通过函数toJSON数据框写为JSON格式,例如鸢尾花数据集写为JSON格式(输出结果较长,在此从略): data(iris) toJSON(iris, pretty

6.8K50

终于和 null say 拜拜了,超开心

从 10 年前开始写第一行 Java 代码至今,一直觉得 null Java 中是一个最特殊存在,它既是好朋友,可以把不需要变量置为 null 从而释放内存,提高性能;它又是敌人,因为它和大名鼎鼎且烦不胜烦...我们来模拟一个实际应用场景,假设小二现在要从数据库中获取一个姓名列表,然后姓名打印到控制台,对应代码如下。...return null; } } 由于 getNamesFromDB() 方法返回了 null 来作为没有姓名列表标志,那就意味着遍历列表时候要先对列表判空,否则将会抛出 NPE 错误,不信你把...来负责任地介绍一下,你们握个手。 假如数据库中存在姓名,则使用 Optional.of() 对返回值进行包装,从而返回一个 Optional 类型对象。...但不管怎么说,终于可以表象上和 null,NPE 说拜拜了,做人嘛,开心点。 ?

36240

开发中造成空指针常见写法,如何预防!

【推荐】防止 NPE,是程序员基本修养,注意 NPE 产生场景: 返回类型为基本数据类型,return 包装数据类型对象时,自动拆箱有可能产生 NPE。...我们来分析一下原因, IDEA target - classes 目录下找到 DEMO 编译后 class 文件,IDEA 会自动帮我们反编译: public class OrderUpdateParam...如果我们没有拉取源码习惯,直接通过前面的转换工具类去转换。 我们潜意识会认为外部接口对象类型也都是包装类型,这时候很容易因为转换出现 NPE 而导致线上 BUG。...下面介绍几种预防 NPE 一些常见方法: 图片描述 4.1 接口提供者角度 4.1.1 返回空集合 如果参数不符合要求直接返回空集合,底层函数也使用一致方式: public List<Order...4.1.3 使用空对象设计模式 该设计模式为了解决 NPE 产生原因第 1 条 “调用 null 对象实例方法”。

41820

Spring Boot 2.x(六):优雅统一返回结果

为什么要统一返回值 我们做后端应用时候,前后端分离情况下,我们经常会定义一个数据格式,通常会包含code,message,data这三个必不可少信息来方便我们交流,下面我们直接来看代码 ReturnVO...public String msg() { return msg; } private String val; private String msg; } 这里,并没有需要存储数据直接放到枚举中...,传入参数是properties文件位置,这样的话,本文最初代码中也就得到了解释。...否则就会导致切点无效,同时需要在启动类中配置: @ComponentScan(value = "indi.viyoung.viboot.*") 导入正是common包下所有文件,以保证可以ResponseAop...return userService.list(); } PS:这里返回值统一为Object,以便数据存入data,实际类型应是Service接口返回类型。

1.2K50

如何用R语言从网上读取多样格式数据

: url:文件所在地址 destfile:下载后文件保存地址,默认为工作目录 method: 提供"internal", "wget", "curl" 和 "lynx"四种method,windows...使用getwd获取当前工作路径,setwd可以改变它 读入XML XML可以说是我们非常熟悉一类数据。我们通常在网上看到电子表格便是XML文件一部分。我们可以看到XML文件大抵是长这样. ?...关于XML这种可扩展性标记语言,我们不再赘述,可以参阅wiki.这里我们关注得到XML文件后如何分析处理。 R提供了XML包供我们来读取这样一个文件。...我们以githubAPI数据为例,下面是github代码仓库部分数据json格式信息,完整版本在这里 { "id": 20472818, "name": "courses",...Useful link: Rwordseg相关信息,例子 Rweibo相关信息,例子 我们不仅可以读入JSON数据也可以通过函数toJSON数据框写为JSON格式,例如鸢尾花数据集写为JSON格式

6.1K70

SpringMVC学习笔记

视图名解析为一个URL文件•jasperReportsViewResolver:视图名解析为报表文件对应URL 我们可以选择一种视图解析器或混用多种视图解析器,并且每个视图解析器都实现了 Ordered...方法体内,我们可以通过入参对象访问到模型中所有数据,也可以向模型中添加新属性数据。...导入依赖之后还需要配置json转换器,一种比较简单方法是SpringMVC配置文件中加入注解驱动配置,也可以手动配置。 <!...4)@RequestBody 与 @ResponseBody相对还有 @RequestBody,它可以把请求体中json格式数据封装成指定对象。...ResponseEntity 文件byte[] 数据放置在其中,之后设置响应头然后返回这个对象,这里演示是图片展示。

93830

完全解析!Bert & Transformer 阅读理解源码详解

本文中,将以run_squad.py以及SQuAD数据集为例介绍阅读理解源码,官方代码基于tensorflow-gpu 1.x,若为tensorflow 2.x版本,会有各种错误,建议切换版本至...需要注意,不同人文件路径都是不一样,你不能照搬,要改成自己路径。..._repr_方法只是在有start_position时候进行字符串拼接。 创造实例 用于训练数据集是json文件,需要用json读入。...然后example变成SquadExample实例化对象example加入大列表——examples并返回,至此实例创建完成。...实例转换 把json文件变成实例之后,我们还差一步便可以把数据塞进模型进行训练了,那就是实例转化为变量。

82920

去,这么简单条件表达式竟然也有这么多坑

最近,小黑哥一个业务改造中,使用三目运算符重构了业务代码,没想到测试时候竟然发生 NPE 问题。 ?...但是明明为 simpleObj做过判空判断,simpleObj 对象肯定不是 null,那么只有 simpleObj#getCode 返回为 null。...但是代码并没有对这个方法返回值做任何操作,为何会触发 NPE? 难道是又是自动拆箱导致 NPE 问题? 解答这个问题之前,我们首先复习一下条件表达式。 点赞再看,养成习惯。...nullInteger : simpleInt; 这个案例为开头例子简化版本,运算上述代码,将会发生 NPE 为什么会发发生 NPE 呢?...只要我们开发过程重点注意包装类型自动拆箱问题就好了,另外也要注意条件表达式计算结果再赋值时候自动拆箱引发 NPE 问题。

41820

为什么阿里巴巴开发手册中强制要求 POJO 类使用包装类型?NPE问题防范

只能被动测试出现问题,更甚是如果是线上出现这种问题,想可能…都明白哈。 2)场景二 简单来说就是我们如果自定义了一个 Student 类,其中有一个属性是成绩 score ....所有NPE场景: 返回类型为基本数据类型,return包装数据类型对象时,自动拆箱有可能产生NPE。...public int f() { return Integer 对象; } 如果为null,自动解箱抛NPE。 数据库查询结果可能为 null。...集合里元素即使 isNotEmpty,取出数据元素也可能为 null。 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。...正例:使用 JDK8 Optional 类来防止 NPE 问题。了解JDK8 Optional 类 五、自言自语 你好,是博主宁春:主页 希望本篇文章能让你感到有所收获!!!

50520

记一次 code review 发现几处小问题总结

好久没写原创了,最近一直忙。忙着开会,忙着 Code Review 等。今天,就给大家分享一下,最近一次 Code Review 成果,分享给大家!希望大家都能够成长!...leftNumMap.get(stat.getDepartmentId()) : 0; 这个也抛 NPE,我们排查了半个多小时,百思不得其解,后来查看 class 文件发现了原因。...所以对对象进行拆箱操作,由于该对象为 null,所以拆箱过程中调用 null.intValue() 时候就报了 NPE。...解决方法很简单: 要么不用三目运算符,直接使用 if else,简单可靠; 或者三目运算符操作数都改为对象。 Integer leftNum = (null != leftNumMap && !...因为 a 与 b 等于 5, -127~128 之内,所以都是直接从 LongCach e里面返回一个 Long 对象,所以他们使用 == 比较时候,就是相等(对于对象类型来说,== 比较是两个对象引用指向堆中地址

35520

Java编码手册之华山版小精华

最近又复习了一下阿里出品,对于开发过程中绝大多数开发者都遵循开发手册,相信开发团队代码可维护性能够绝对性提高。为什么要整理出这篇文章呢?...相信大家会有这种感觉—读书或者接触新知识时,如果没有人提出相关知识点,大家看过之后会发现没有任何收获一样。...开发手册自问也看了好几遍,但是其中部分点有时也会遗漏忘记遵循,故小编将自己容易遗漏或者开发过程中强制遵循点列出来,同时也给新手抛砖,引玉就不敢了。。。。 1....【推荐】防止 NPE,是程序员基本修养,注意 NPE 产生场景: 1) 返回类型为基本数据类型,return 包装数据类型对象时,自动拆箱有可能产生 NPE。...说明:存储时候,float 和 double 都存在精度损失问题,很可能在比较值时候,得到不正确 结果。如果存储数据范围超过 decimal 范围,建议数据拆成整数和小数并分开存储。

59840

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券