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

小谈 Kotlin 的空处理

不久前加入的项目用的是 Kotlin 与 Java 混合开发的模式,纸上得来终觉浅,终于可以实践一把新语言。本文就来小谈一下 Kotlin 中的空处理。...在我看来,Kotlin 没有帮开发者解决了 NPE (Kotlin: 臣妾真的做不到啊),而是通过在语言层面增加各种强规则,强制开发者去自己处理可能的空指针问题,达到尽量减少(只能减少而无法完全避免)出现...那么 Kotlin 具体是怎么做的呢?别着急,我们可以先回顾一下在 Java 中我们是怎么处理空指针问题的。 Java 中对于空指针的处理总体来说可以分为“防御式编程”和“契约式编程”两种方案。...两个代码块不是互斥关系 假如是 Java 的写法,那么不管 n 的值怎样,两个代码块都是互斥的,也就是“非黑即白”。...(不过这种场景会出错的概率不大,因为在后一个代码块里很多对象 n 的方法用不了,就会注意到问题了) 后记 总的来说切换到 Kotlin 还是比预期顺利和舒服,写惯了 Kotlin 后再回去写 Java

88610

Kotlin 企业级应用开发教程(Spring 5 + Spring Boot 2.0 + MyBatis)

Kotlin 企业级应用开发教程 —— Spring 5 + Spring Boot 2.0 + MyBatis 内容简介 Kotlin编程语言是一种现代语言,它简洁,安全,实用,同时专注于与Java...它是一种实用的语言,具有非常低的学习曲线,可以被Java开发人员快速掌握。...我们将讨论:Kotlin 特性之旅,可空类型与类型安全,使用Kotlin进行函数编程,使用Kotlin进行面向对象编程,Kotlin标准库的强大功能以及与Java互操作性。...端以及 Java 运行的所有地方 1.3.2 类型系统与智能推断 1.3.3 函数式编程和面向对象编程 1.4 一键转换Java 到 Kotlin 1.5 小结 第 2 章 可空类型与类型安全 2.1...Java 互操作 6.1 属性的读写 6.1.1 Getter和Setter 6.2 空安全类型 6.2.1 Kotlin空安全类型问题 6.3 包级函数:静态方法 6.4 扩展方法:带Receiver

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

    第1章 Kotlin是什么第1章 Kotlin是什么

    Andrey Breslav, Kotlin创始人 编程的真正的问题在于,如何把人类脑子里对问题的解决方案“具化”到机器世界,而这个“具化”的过程正是编程语言所要表达的东西。...人们可以用机器语言写一个“翻译程序”, 从而使得我们可以在一个更高层次进行编程。 后来汇编用久了,人们也逐渐发现了使用汇编过程中的问题:可移植性差。...而完成这个映射过程翻译的程序,我们就称之为“编译器”。 而C/C++语言最大的一个问题就是“一切都会尖叫着停止”,因为它们使用了直接操纵内存的指针。...jdk各个平台的安装包 我们经常说的Java语言是平台无关的,跨平台的。其实这是针对从Java/Scala/Kotlin/Groovy等的源代码到JVM字节码这一层是平台无关的。...可扩展性(语言的设计具备很好的可扩展性) ...

    1.3K21

    字节跳动Android客户端实习 3+1 面经,内部面试官透露通关秘籍

    如果用 Kotlin 去调用一个具有返回值的 Java 函数,那么这个返回值是可空的还是非空的呢? Kotlin 中的可见性和 Java 是不一样的,分别讲讲?...如果现在有一个高阶函数被 inline 修饰,我不想让它的参数被内联,该怎么办呢? Kotlin 是可以跨平台编译的,讲讲你的了解? 你刚才提到的编译到“原生平台”,指的是什么?...现在如果让你用 Kotlin 写一个跨平台的项目,你该怎么做? 5. 浏览器里从输入一个网址,到最终看见网页,发生了什么? HTTP 是应用层协议,讲讲是如何建立的?...具体来说它们有些是带 Receiver 的、有些是带参数的,你在使用过程中是怎么选择的呢? 5. OOP 中的设计模式有了解过吗? Java 中的单例模式分为哪些呢?...Kotlin 中的 object 相当于 Java 中的哪一种单例模式? 类加载器又是在什么时候去加载这个类呢? 解释一下饿汉式中存在的性能问题? 饿汉式是怎么做到线程安全的?

    1.7K00

    写一个 golang 风格的协程扩展

    val (result, err) = async { ... }.awaitOrError() 这里拿到的 result 也好, err 也好,都是可空类型的,显然这对于后者来说到不是什么问题,而对于...如果返回的 result 是 T!,那么 Kotlin 就不会对它有太多的约束,你愿意把它当做可空类型,那他就可以是可空类型,反之,你愿意把它当做不可空类型,只要在使用前能确定它不为空就好。...Java 数据类与解构 只是,这时候又产生了新的问题,Java 中要怎么定义数据类呢?不是数据类又怎么解构呢?...相比之下,这个问题就简单多了,如果你对 Kotlin 的数据类的字节码比较熟悉,你就会想到只要我们在前面的 Result 类当中添加两个方法: ......只要你定义了 componentN 方法,哪怕是在 Java 当中定义,Kotlin 当中对于这个类的实例也是可以进行解构的。

    52210

    【翻译】Kotlin致简代码之路

    【翻译】Kotlin致简代码之路 2017-06-30 by Liuqingwen | Tags: Kotlin 翻译 | Hits 一、前言 挺适合新手的一篇建议性博文。...原文链接:Clean Code with Kotlin 因本人水平有限,翻译不好之处还请多包涵,文章中 “ Clean Code ” 我喜欢翻译成“致简代码”,但是这个名字的书一般是被翻译成“整洁代码”...我们应该分解子程序并给他们取一个可描述性的名称。这样的话,我们的代码就会变得像一个故事。而且,我们应该从主要逻辑中辨别出细节。 Kotlin 可以帮我们做到这点吗?不行,因为这些规则是无关于语言的。...大部分情况这只会暴露出 Java 语言的缺陷。辛运的是,这些惯用方法和模式都很好的集成在 Kotlin 中了。详细信息可以参考我博客里关于 Kotlin 习惯用法的文章。...因此, Kotlin 毫无疑问是跨入“星光大道”的又一大步! Kotlin 翻译

    1.4K30

    Java和 Kotlin中的常见NPE

    这种情况在Kotlin里几乎不再是问题,因为Kotlin从语言层面引入了空安全支持,彻底减少了NPE的出现概率。下面我们看看两种语言是如何应对NPE的,通过示例展示常见的编程场景。...标记它是可空的。这样,Kotlin可以在编译时帮助我们捕捉潜在的NPE,而不是等到代码运行时才发现。...(带?表示可空),表示它可以保存null值:fun getStringLength(a: String?): Int = a?.length ?: 0在上面的代码中,a?....六、Kotlin 的优势总结综上总结,Kotlin通过编译时的空检查、可空类型支持和安全调用等功能,几乎不会发生了NPE的发生。Java虽然引入了Optional类解决空值问题,但整体语法很繁琐。...在日常开发中,Kotlin让代码更流畅、更安全,从Java转向Kotlin的开发者可以充分体验到空安全特性的便捷,减少了处理空值所带来的麻烦。

    10720

    Kotlin热身篇: 简介与基本用法

    精彩内容不容错过~ 一. kotlin 简介 Kotlin 拥有强大的生态,因为 Kotlin 是一门跑在 Java 虚拟机上的函数式语言,完全符合 JVM 的设计规范,如: 类型擦除,装箱和拆箱等等...二. kotlin 和 java8 的相同点 kotlin 和 java8 的相同点我总结了三个,第一个是: 它们都是面向对象和函数式编程语言,第二个是: 它们都是强类型静态语言,最后一个就是它们都符合...const 相当于 java 里面的 final,表示一旦初始化便立即被主内存看到,不能被二次赋值 当然 kotlin 也有自动拆箱和装箱将 Int 翻译成 Java 的 int 或 Integer...表示可空类型与非空类型,Kotlin 的类型系统旨在消除来自代码空引用的危险,详细代码如下: foo? var foo?...总结 本文先从 kotlin 概念带大家进入 kotlin 语言,然后说了一下 kotlin 和 java8 的异同以及相互转换方式,最后对 Kotlin 基础语法进行一一阐述,如: kotlin 方法和变量使用

    1.6K30

    Kotlin 语言极简介绍《Kotlin极简教程》正式上架:

    Kotlin具备现代(也有称下一代的)静态编程语言的很多特点,如: 类型推断、多范式(OOP,FP)支持、可空性表达、扩展函数、DSL 支持等。...Java的好处是语法工整,清晰直接,严格;但是它的问题也很明显:“verbosity”,中文通俗翻译就是 “罗里吧嗦,烦死了”。...另外Scala非常致命的一个缺陷就是兼容性实在不敢恭维,一个寿命有十多年的语言,而且还是运行在JVM上的语言居然到现在都有大版本升级二进制互相不兼容的问题,使用第三方库还要考虑下对方是什么版本的?...Kotlin没有Scala那么“高冷”,难度上是可以适合绝大多数开发人员的,加上和Java的兼容性很好,又被Google钦点,未来Kotlin必将与兄弟Java共同作为JVM上的主流语言,而且是成长潜力巨大的语言...另外,涉及到集合类、反射、多线程、IO等操作时,Kotlin则直接使用了Java的特性,并在Java的基础上做了易用的扩展。这点跟Groovy一脉相承。

    85730

    【翻译】17位谷歌专家称号大牛如何看待Kotlin

    我也能观察到 Kotlin 存在的问题:缺乏静态分析工具,也没有现成的设计模式。 后者相对来说不是一个大问题,如果你的项目没有那么复杂的话。...我觉得目前最大的问题在于移植,很难说服一个公司转型到 Kotlin 并告诉他们价值所在。对于科技型公司这会相对轻松些,因为这是对公司开发者的一种激励和挑战,但是对于小型企业却很难。...得益于与 Java 的互操作性,一旦遇到任何 Kotlin 中我不能解决的问题,我都能回滚到 Java 中解决。 这门语言最强大的,说来也是简单的一个特性是函数扩展功能,它确实简化了我的工作流程。...Java 是在 22 年前设计的,并考虑了整个技术发展的演进,一直到现在都还有一些难以忽略的问题。作为一个开发者,我经常会尝试其他的语言。...其中最值得一提的解决 Java 这些问题的一门语言是 Scala 。而另一个转折点是我看到了 Swift 这门语言。

    1.2K50

    从 Java 到 Kotlin,再从 Kotlin 回归 Java

    它允许我们在不影响静态类型检查的情况下简化代码。 例如,这段 Kotlin 代码: ? 将由 Kotlin 编译器翻译成: ? 它曾经是胜过Java的真正优点。...Null-safe类型是Kotlin的杀手级特征。这个想法很好。在Kotlin,类型是默认的非空值。如果您需要一个可空类型,您需要添加?符号,例如: ?...在我看来,Kotlin的类型系统中所有这些类似scala的东西!,?和!!,实在是太复杂了。为什么Kotlin从Java的T类型推断到T!而不是T?呢?...我们来研究一下这个问题。 通常,在使用 Optional 时,你会先进行一系列空安全的转换,最后来处理空值。 比如在 Java 中: ? 在 Kotlin 中也没问题,使用 let 功能: ?...协作翻译 原文:From Java to Kotlin and Back Again 链接:https://allegro.tech/2018/05/From-Java-to-Kotlin-and-Back-Again.html

    1.8K40

    又一巨头从Java迁移到Kotlin:关键应用全部开始切换、安卓代码库超过千万行Kotlin代码

    将代码库转换为 Kotlin Kotlin 是一种更年轻的编程语言,也依赖于 Java 虚拟机。...到 2019 的 Google I/O 大会,Google 正式宣布,Kotlin 编程语言已成为 Android 应用开发人员的首选语言,并在当年年底表示前 1000 个 Android 应用程序中有近...Kotlin 是非常合理的……” 除了受欢迎之外,Meta 认为 Kotlin 拥有的主要优势包括可空性、函数式编程、代码更短、以及领域特定语言(DSL)等等。...其他的问题还包括 Java 无法将类型参数标记为可空(最近才刚刚修复);Kotlin 的重载规则考虑到了可空性,Java 的重载规则却没有考虑到。...android/android-java-kotlin-migration/ 声明:本文为InfoQ翻译,未经许可禁止转载。

    69630

    Kotlin入门(12)类的概貌与构造

    Java的三点不同之处: 1、Kotlin初始化函数(看似构造函数?)...的名字叫init,不像Java那样把类名作为构造函数的名称; 2、Kotlin打印日志使用了类似C语言的println方法,而非Java的System.out.println; 3、Kotlin创建实例时省略了关键字...可事情往往不是你想的那样,Kotlin作为新时代的编程语言,它的设计总是突破常规。前面介绍函数的时候,提到Kotlin把函数看成是一种特殊的变量,至于类某种意义上算是一种特殊的函数。...,Java可以通过覆写带不同参数的构造函数来实现,那么Kotlin已经在类名后面指明了固定数量的入参,又该如何表示拥有其它参数的构造函数?...注意到AnimalSeparate类的两个构造函数只是相差一个输入参数,所以完全可以把它们合并成一个带默认参数的主构造函数,新的主构造函数既可以输入两个参数,又可以输入三个参数。

    44920

    干货 | Kotlin超棒的语言特性

    不过大部分开发者对Kotlin的使用,仍然局限于把Java代码逻辑按照Kotlin语法进行转换的层面,其实Kotlin和Java虽然具有很强的互操作性,但本质上还是两种完全不同设计思想的语言。...为了获得更好的空安全,Kotlin中所有的对象都明确指明可空或者非空属性,即这个对象是否可能为null。 ? 对于可空类型的对象,直接调用其方法,在编译阶段就会报错。...若前面部分为null,则整个表达式返回值等于c的值,否则等于前面部分的值。把它翻译成Java代码,是这样的 ? 同样等同于这样 ? 即Elvis表达式的含义在于为整个 ?...06Nullable Receiver NullableReceiver我将其翻译成“可空接收者”,要理解接收者这个概念,我们先了解一下Kotlin中一个重要特性:扩展。...11 工具 对于初学Kotlin的开发者而言,编译器提供了贴心的小工具,甚至可以直接把Java代码转换成Kotlin代码。直接把Java代码拷贝到.kt文件中,编译器会弹出如下提示: ?

    1.5K40

    第2章 Kotlin 语法基础第2章 Kotlin 语法基础

    第2章 Kotlin 语法基础 人与人之间通过语言来交流沟通,互相协作。人与计算机之间怎样“交流沟通”呢?答案是编程语言。...一门语言有词、短语、句子、文章等,对应到编程语言中就是关键字、标识符、表达式、源代码文件等。通常一门编程语言的基本构成如下图所示 ? 编程语言的基本构成 本章我们学习 Kotlin语言的基础语法。...protected 当前类以及继承该类的可访问 public 默认值,对外可访问 internal 整个模块内可访问(模块是指一起编译的一组 Kotlin 源代码文件。...问题场景: 打印1-10中的奇数。...会会默认导入一些基础包到每个 Kotlin 文件中: kotlin.* kotlin.annotation.* kotlin.collections.* kotlin.comparisons.* (自

    2.7K20

    使用 Kotlin Symbol Processing 1.0 缩短 Kotlin 构建时间

    其与 Kotlin 注解处理工具 (KAPT) 的功能相似,但速度提高了 2 倍,同时还可以直接访问 Kotlin 语言结构并支持多个平台目标。...为 Room 添加 KSP 支持不仅能提升编译速度,还能让 Room 更好地理解 Kotlin 代码,比如使用 KAPT 无法实现的泛型的可空性。...Kotlin 注释处理工具 (KAPT) 通过与 Java 注释处理基础架构相结合,让大部分 Java 语言注释处理器能够在 Kotlin 中开箱即用。...为此,KAPT 将 Kotlin 代码编译进 Java 存根,这些存根中保留了 Java 注释处理器关注的信息。...使用带 KSP 的 Moshi 或 Room 如果您在项目中使用 Moshi 或 Room,您只需快速修复模块的构建文件即可体验 KSP。

    3.7K10

    Kotlin:01-Kotlin简介及编译环境搭建

    一、Kotlin简介 Kotlin是一个基于JVM的新的编程语言,由JetBrains开发。...JetBrains,作为目前广受欢迎的Java IDE IntelliJ的提供商,在Apache许可下已经开源其Kotlin编程语言。...与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。...另外,在2017 google/IO 大会上,kotlin被扶正成为Android开发的官方语言,在我个人看来,在Android领域取代java只是早晚的事情了。...当 kotlin 取代java的那一天,Google就再也不用和ORACLE 就 java的使用权问题扯皮了。 三、Kotlin编译环境 (一)、kotlin的编译环境有哪些?

    1.8K20

    Kotlin 1.2 的新增了哪些特性?

    其他语言特性 注解中的数组常量 从 Kotlin 1.2 开始,注解的数组参数可以使用新的数组常量语法而不是 arrayOf 函数来传递: ? 数组常量语法被限制为注释参数。...JVM 带默认函数参数的内联函数 内联函数现在允许其内联函数参数具有默认值: ?...kotlin.text.Regex 类已成为可序列化的类,现在可以在可序列化的层次结构中使用。...为了减少使用此类字节码处理工具的用户的这个问题,我们添加了一个命令行选项 (-Xnormalize-constructor-calls=MODE),它会告诉编译器为这样的结构生成更多的类 Java 字节码...后话 看了这么多的改变,我们是否就可以深入的学习Kotlin语言,不妨看看这边文章:Kotlin真的值得学习吗? 作者:OSC - 协作翻译。

    2.8K10

    kotlin到底好在哪里?

    = 2.0f a = null b = null c = null d = null e = null f = null 非空类型不可能为null,所以不用考虑空指针的问题.只有可空类型有可能为null...的可空类型的时候都是以简化了判空处理的优点来介绍的.例如下面java方法中的判空处理,用kotlin只需要一行代码就可以了: public Character front(String str) {...对于非空类型,它永远不可能为空,我们不需要考虑它的空指针问题.而对于可空类型,我们需要明确指定在它为空的时候的调用抛出异常亦或进行执行.这样其实缩小了空指针异常的范围,同时也减小了空指针对程序稳定安全的破坏性...泛型这部分参考了《Kotlin极简教程》,这本书真的不错,强烈推荐.而大家如果对java泛型有兴趣的话可以去可空《Effect java》的相关章节或者也可以去看看我之前写的两篇文章 《java泛型那些事...》、《再谈Java泛型》 7、无缝调用java 当然,一个语言就算做的再好,但是没有一个健全的生态的话是很难被大众接受的.kotlin能够火起来,甚至被谷歌爸爸钦定为安卓的官方推荐语言.一个很重要的原因就是它可以无缝与

    1K70

    Kotlin 之美

    反之,充分利用好四种访问权限,将类和成员的可访问性控制到最小,更有利于程序的扩展。在这点上,Java 和 Kotlin 是大体一致的,但有细微区别: ?...理解 DSL DSL(domain specific language),即领域专用语言:专门解决某一特定问题的计算机语言,比如大家耳熟能详的 SQL 和正则表达式。...内部 DSL 但是,如果为解决某一特定领域问题就创建一套独立的语言,开发成本和学习成本都很高,因此便有了内部 DSL 的概念。所谓内部 DSL,便是使用通用编程语言来构建 DSL。...比如,本文提到的 Kotlin DSL,我们为 Kotlin DSL 做一个简单的定义: “使用 Kotlin 语言开发的,解决特定领域问题,具备独特代码结构的 API 。”...总结 细细品味 Kotlin,你会发现她将代码整洁之道(Clean Code)和高效 Java 编程(Effective Java)中的部分精华融入到的语法和默认的规约中,因此她可以让开发者无形中写出整洁和高效的代码

    2.9K20
    领券