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

小谈 Kotlin 空处理

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

85310

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

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 崩溃

大家好,是坤哥 网上看到一个很有意思美团面试题:为什么线程崩溃崩溃不会导致 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

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

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

55420

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

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

1.4K00

懵逼...

你好呀,是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

如何避免 Java 中“NullPointerException”

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

2.8K20

如何用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 说拜拜了,做人嘛,开心点。 ?

36140

如何用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

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

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

【推荐】防止 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

SpringMVC学习笔记

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

93430

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

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

82820

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

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

41520

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

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

50320

Python学习笔记 —— 文件操作

今天来介绍一下Python文件操作,后面的五六七只是比较浅显介绍了一下,前面四节内容才是我们主要掌握 目录 一、输入一行数据,并保存到文件word中(.doc) 二、文件中输入多条内容,并保存到...可以让我们优雅处理文件操作异常,下面文件名改成正确试试看  有了try  except就可以处理文件异常(比如文件丢失),但是讲了这么多,还是没有讲文本读取 接下来我们就讲讲文件内容读取...比如,给你一篇文章,让你去计算某一个特定词语出现次数时候,你可以用下面这个方法 这是一个之前创建好一个 txt 文件 任务是查找 “exercise” 这个单词位置,我们可以用循环遍历这个文件中每一行内容...,我们对文件进行只读操作 #数据读入一个行列表 text_list = open("more_line text.txt","r").readlines() #读取每一行 counter 值加一,...,是我们 肉眼看不懂,计算机理解一种进制,这个就不做介绍了 还可以尝试用JSON—— JavaScript 对象标记,JSON是一种可读纯文本形式,下面就以下面的一个简单实例简要介绍一下JSON

1.2K10

如何用Python读取开放数据?

选择是肯塔基州莱克星顿(Lexington)市。 为什么不选纽约、洛杉矶,却要选它呢? 因为美国访学时候,周末经常去那里。 访问大学坐落在村子里。...JSON JSON是JavaScript Object Notation(JavaScript对象标记)缩写,是一种轻量级数据交换格式。它跟CSV一样,也是文本文件。...我们Jupyter Notebook中打开下载JSON文件,检视其内容: 我们需要数据都在里面,下面我们回到Python笔记本文件ipynb中,尝试读取JSON数据内容。...继续来: 还是只展示前几行: 这不就是我们想要读取数据吗? 为了和csv数据做出区分,我们这次数据读取后存储df1变量。 显示一下前几行: 数据都对,可是列名称怪怪。...你可能会有以下疑问: 既然CSV文件这么小巧,Pandas读取起来也方便,为什么还要费劲去学那么难用JSON和XML数据读取方法呢? 这是个好问题! 能想到,至少有两个原因。

2.6K80
领券