当前位置:首页 > Java入门 > 正文内容

kotlin ::class.java(kotlin.jvm.internal.intrinsics)

abcsky887个月前 (10-29)Java入门106

本篇文章给大家谈谈

【CSDN 编者按】Kotlin 和 Java 是如何解决 Null 问题?本文作者分享了解决思路原文链接:https://blog.frankel.ch/null-safety-java-vs-kotlin/。

kotlin ::class.java(kotlin.jvm.internal.intrinsics)

未经授权,禁止转载!作者 | Nicolas Fränkel 责编 | 弯月出品 | CSDN(ID:CSDNnews)在本文中,我想讨论一下 Kotlin 和 Java 是如何解决 Null 问题的。

可为 Null相信每一位从事软件开发超过两年的人都听过下面这句话:我把 Null 引用称为自己的十亿美元错误它的发明是在 1965 年,那时我用一个面向对象语言(ALG淘宝SEO什么意思OL W)设计了第一个全面的引用类型系统。

我的目的是确保所有引用的使用都是绝对安全的,编译器会自动进行检查但是我未能抵御住诱惑,加入了 Null 引用,仅仅是因为实现起来非常容易结果导致了数不清的错误、漏洞和系统崩溃,可能在之后的 40 年中造成了十亿美元的损失。

—— 图灵奖得主 Tony HoareNull 背后的基本思想是能够定义一个未初始化的变量当有人调用这类变量的某个成员时,运行时就会寻找变量的内存地址,结果就是引用失败,因为其后面没有任何东西。

许多编程语言都包含 Null 值,只不过名称不同罢了:Python 有 None;JavaScript 有 null;Java、Scala 和淘宝SEO什么意思 Kotlin 也有 null;Ruby 有 nil;以及其他等等。

有些不允许使用未初始化的值,比如 RustKotlin 中的 Null 安全性如上所示,Kotlin 也有 null 值只不过,null 融入到了类型系统中在 Kotlin 中,每个类型 X 实际上都有两种类型:。

X:不可为 null,类型 X 的任何变量都不可以为 null编译器会确保这一点;val str: String = null上述代码无法通过编译X?:可以为 nullval str: String? =

null上述代码可以编译既然 Kotlin 允许使用 null 值,为什么支持者们会鼓吹它具有 null 安全性呢淘宝SEO什么意思?因为编译器会调用可能为 null 值(即可为空类型)的成员val str: String? = getNullableString()。

val int: Int? = str.toIntOrNull() #1#1 无法通过编译修复上述代码的方式是,在调用成员之前,先检查变量是否为 null:val str: String? = getNullableString()。

val int: Int? = if (str == null) nullelse str.toIntOrNull()这种方法很模式化,Kotlin 提供了 null 安全的运算符:val str: String? = getN淘宝SEO什么意思ullableString()

val int: Int? = str?.toIntOrNull()Java 中的 Null 安全性如上,我们讨论了 Kotlin 管理 Null 值的方法,下面我们来看看 Java首先,Java 中既没有不可为 null 的类型,也没有 null 安全的运算符。

因此,每个变量都有可能为 null,而且我们也的确应该如此思考MyString str = getMyString(); #1 Integer anInt = null;

#2if (str != null) {anInt = str.toIntOrNull();}#1 String 没有 toIntOrN淘宝SEO什么意思ull() 方法,所以我们假设 MyString 是一个包装类型,实际的操作交给 String。

#2 这里必须使用可变引用如果将多个调用放在一起,结果更糟,因为每个返回值都有可能为 null为了安全着想,我们需要检查每个方法调用返回的值是否为 null如下代码片段有可能抛出异常 NullPointerException:。

var baz = getFoo().getBar().getBaz();修复方法如下,但非常繁琐:var foo = getFoo();var bar = null;var baz = null;if

(foo != null) { bar = foo.getBar();if淘宝SEO什么意思 (bar != null) { baz = bar.getBaz(); }}出于这个原因,Java 8 引入了 Optional 类型。

Optional 是一个包装,负责处理可能为 null 值的情况在其他语言中,该类型被称为 Maybe、Option 等Java 语言的设计者建议,方法应返回:如果 X 不可能为 null,则返回类型 X;。

如果 X 可能为 null,则返回类型 Optional如果我们将上述方法的返回类型改为 Optional,就可以编写出 null 安全的代码,而且还可以获得不可变性:finalvar baz = getFoo().flatMap(Foo::getBar淘宝SEO什么意思)。

.flatMap(Bar::getBaz) .orElse(null);对于这种方法,我认为核心问题在于,Optional 本身可以为 null。

Java 语言本身无法确保 Optional 不为 null。此外,方法的输入参数不建议使用 Optional。为了解决这个问题,网上涌现了很多基于注解的库:

然而,不同的库,处理方式也不同:Spring 会在编译时生成警告消息;FindBugs 需要专门执行;Lombok 会生成一段检查 null 的代码,如果变量无论如何都会为 null,则抛出异常 NullPointerException。

总结当 Null 安全性不是一个大问题时,Java 可淘宝SEO什么意思以被接受因此,NullPointerException 异常会频繁发生唯一安全的解决方案是将每个方法调用包装在 null 检查中这种方式很有效,但同时也很模式化,代码也更加难以阅读。

开发人员称赞 Kotlin 带来了 Null 安全性,这是因为该语言的设计中融入了 Null 值处理机制Java 这方面的处理远不如 Kotlin,因为 Java 语言架构师更加重视向后兼容性,而不是代码安全,这是设计上的决定。

但是,作为一名开发人员,从 Null 安全性的角度出发,我认为 Kotlin 是比 Java 更有吸引力的选择

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://4blc.com/post/675.html

分享给朋友:

“kotlin ::class.java(kotlin.jvm.internal.intrinsics)” 的相关文章

java为什么要用反射机制(java为什么要用抽象类去实现接口)

本篇文章给大家谈谈 目录1、static的“由来”2、static的使用场景3、关于static的常见问题4、总结 Java是一种面向对象编程的语言,而对象是客观存在的事物,对同类对象抽象出其共性,便是Java中的类,类是对象的模子,具有相同属性和方法的一组对象的集合。 有...

编程java入门教程(java编程 培训班)

本篇文章给大家谈谈 随着计算机技术的迅猛发展,许多人都正在探索编程语言,学习编程并获得专业的认证证书随着编程行业朝着规模化和专业化发展,越来越多的人开始关注编程培训班,而Java正是最受欢迎的技术之一要想选择一个合适的Java编程培训班,选择的时候需要考虑一些因素。 首先,...

原画培训机构哪个好(原画培训班哪个好)

本文分享给大家的是: 原标题:原画培训班价格多少钱原画培训班价格多少钱?原画培训班价格范围在5000-30000元之间,线上原画培训班价格相对便宜,线下原画培训班价格非常昂贵,所以建议最好可以找线上的原画培训网课,在此推荐几个网上的原画网课平台! 一:学原画的线上培训网课平...

灵活用工是干什么的工作(灵活用工的意思)

本文分享给大家的是: 随着社会的不断发展,现在的用工形式也发生了很大的改变,不再是仅仅只有传统的全职就职方式,灵活用工也成为了很多企业新的用工选择,作为一个比较新兴的用工形式,有的朋友对它还不是很理解,今天就一起来了解一下:灵活用工是什么意思?服务比较好的灵活用工平台都有哪些推荐?...

2021年全部3D藏机诗汇总260期(2021年全部的金牌调解)

本文分享给大家的是: 下面是本次总结包含Java内容:多线程,并发及线程基础数据类型转换的基本原则垃圾回收(GC)Java 集合框架数组字符串GOF 设计模式SOLID (单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)设计原则 抽象类与接口Java 基础,如 equa...

javabean怎么读(javabean怎么创建)

javabean怎么读(javabean怎么创建)

今天给各位分享 “这里是offer学院,帮你轻松拿offer”嗨~大家好,我是学长今天的你过得还好吗?- 2022.11.24 -本文为 【Spring概述与IOC容器】相关知识,对Spring概述,IOC容器(包括:IOC概述、配置元数据、容器实例化与使用、Bean的概述、依赖注...