对比Java讲解Kotlin中?.与!!.的区别

前言

本文主要介绍了关于Kotlin中?.与!!.的区别,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

1、?.

//kotlin:
a?.foo()

//相当于java:
if(a!=null){
 a.foo();
}

2、!!.

//kotlin:
a!!.foo()

//相当于java:
if(a!=null){
 a.foo();
}else{
 throw new KotlinNullPointException();
}

时间宝贵的同学可以不要看下面的了(` _ `)

3、再来说下"!!"

值得一提的是,当我们直接调用一个可空变量的某方法或某成员变量时:

直接调用,报错提示

Android Studio会提示在一个可空变量上,只有"安全调用"(safe call (?.))和"不为空的断言调用"(non-null assert call(!!.))是被允许的,可以得知"!!"相当于是断言操作,即:

//(Kotlin)
a!!.foo()

//等于(Kotlin):
a!!
a.foo()

//相当于(Java):
assert a!=null;
a.foo();

//也就相当于(Java):
if(a == null){
 throw new NullPointException();
}
a.foo();

进而有上面第2点结论。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Kotlin新手基础学习之Elvis操作符

    Kotlin简介 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函数.操作符重载.字符串模板.它与Java高度可互操作,可以同时用在一个项目中. kotlin 语言特性 kotlin中一切皆为对象 没有像java一般的基本数据类型,数值类型为:Int, Float, Double等 函数也是对象,可作为参数和返回值 自然就会有高阶函数和lambda 语法特性及规范

  • kotlin代码中!!操作符的清楚方法

    前言 空安全是Kotlin中非常实用的特性,它能够让你避免许多隐藏的NullPointerExceptions问题.然而当你使用AS将Java代码转换成Kotlin代码后会出现很多的!! 操作符,因为出现!!意味着这里可能有未捕获的KotlinNullPointerException异常. 对于一个有强迫症的程序猿来说一个类中大篇幅的出现!! 绝对会使他们发疯的.幸运的是我们可以通过以下方式避免使用!!操作符. 1. 使用val代替var 我们都知道val修饰的变量是只读的,var修饰的变量是可

  • Kotlin学习教程之操作符重载详解

    前言 在 Kotlin 中,我们可以用 约定的操作符,代替 调用代码中以特定的命名定义的函数,来实现 与之对应的操作.例如在类中定义了一个名为 plus 的特殊方法,就可以使用加法运算符 + 代替 plus() 的方法调用.由于你无法修改已有的接口定义,因此一般可以通过 扩展函数 来为现有的类增添新的 约定方法,从而使得 操作符重载 这一语法糖适应任何现有的 Java 类. 算术运算符 我们就从最简单直接的例子 + 这一类算术运算符开始. data class Point(val x: Int,

  • Kotlin基础教程之操作符与操作符重载

    Kotlin基础教程之操作符与操作符重载 Kotlin操作符的使用方法与其他语言差不多,最大的特点就在于infix function call(事实上infix function call并不是操作符的特性,而是函数的特性)和操作符重载. 可以看到在Kotlin中大部分的操作符都与一个函数相对应,之所以这样做,大概是为了进行操作符重载. Kotlin官方文档中强调"=赋值"操作在Kotlin中不是操作符,换句话说类似于x = y = z这样的连续赋值并不被允许(甚至赋值操作也不能和常规

  • 对比Java讲解Kotlin中?.与!!.的区别

    前言 本文主要介绍了关于Kotlin中?.与!!.的区别,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1.?. //kotlin: a?.foo() //相当于java: if(a!=null){ a.foo(); } 2.!!. //kotlin: a!!.foo() //相当于java: if(a!=null){ a.foo(); }else{ throw new KotlinNullPointException(); } 时间宝贵的同学可以不要看下面的了(` _ `)

  • Kotlin中?和!!的区别详细对比

    前言 很多同学刚上手使用Kotlin知道它有针对Java NullPointerException的管理,而在Kotlin中?和!!均是和NullPointerException有关系,可他们的区别到底是什么呢?为什么别人开发的项目中出现了好多"?",而我读起来却满脸问号. 不懂就问百度呀,确实有人解释它们的区别,比如: 这是输入"kotlin ?和!!"搜索到的百度第一条答案,确实这位说的没错.不过我觉得对于一个刚接触KT(Kotlin)的新手来说,他恐怕需要有汉

  • 一文讲解Kotlin中的contract到底有什么用

    目录 前言 测试 查看 contract 函数 returns callsInPlace 总结 前言 我们在开发中肯定会经常用Kotlin提供的一些通用拓展函数,当我们进去看源码的时候会发现许多函数里面有contract {}包裹的代码块,那么这些代码块到底有什么作用呢?? 测试 接下来用以下两个我们常用的拓展函数作为例子 public inline fun <T, R> T.run(block: T.() -> R): R { contract { callsInPlace(block

  • 对比Java设计模式编程中的状态模式和策略模式

    为了能在Java应用程序中正确的使用状态模式和策略模式,开发人员需要清楚地知道这两种模式之间的区别.尽管状态模式和策略模式的结构非常相似,它们又同样遵循开闭原则,都代表着SOLID设计原则的'O',但它们的意图是完全不同的.Java中的策略模式是对一组相关的算法进行封装,给调用方提供了运行时的灵活性.调用方可以在运行时选择不同的算法,而不用修改使用策略的那个Context类.使用策略模式的经典例子包括实现加密算法,压缩算法,以及排序算法.另一方面,状态模式使用一个对象可以在不同的状态下表现出不同

  • Kotlin中let()with()run()apply()also()函数的使用方法与区别

    相比Java, Kotlin提供了不少高级语法特性.对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码.在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码.Standard.kt是Kotlin库的一部分,它定义了一些基本函数. 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大. 一.回调函数的Kotin的lambda的简化 在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使用一个lamb

  • Kotlin中单例模式和Java的对比浅析

    前言 单例模式,一直以来是我们在日常开发中最常用的一种设计模式,更是面试中非常重要,也非常容易被问到的问题.在日常开发中,大家常用的语言还是Java,但今天我给大家带来的是在Kotlin语言中,单例模式是怎么编写的,并且会对比Java方式,下面话不多说了,来一起看看详细的介绍吧 一.懒人写法(恶汉式) java中 public class Singleton{ public static final Singleton instance = new Singleton(); public Sin

  • java协程框架quasar和kotlin中的协程对比分析

    目录 前言 快速体验 添加依赖 添加javaagent 线程VS协程 协程代码 多线程代码 协程完胜 后记 前言 早就听说Go语言开发的服务不用任何架构优化,就可以轻松实现百万级别的qps.这得益于Go语言级别的协程的处理效率.协程不同于线程,线程是操作系统级别的资源,创建线程,调度线程,销毁线程都是重量级别的操作.而且线程的资源有限,在java中大量的不加限制的创建线程非常容易将系统搞垮.接下来要分享的这个开源项目,正是解决了在java中只能使用多线程模型开发高并发应用的窘境,使得java也能

  • Kotlin中标准函数run、with、let、also与apply的使用和区别详解

    前言 和Java相比,在Kotlin中提供了不少新的特性.这次我们就来聊一聊Kotlin的一些通用的扩展标准函数run,with,let,also和apply.对于这五个标准函数它们都存在于Kotlin的源码标准库当中,也就是在Standard.kt文件当中.它们都是适用于任何对象的通用扩展函数.但是对于run,with,let,also和apply这五个函数他们的用法及其相似,以至于我们无法确定去选择使用哪一个.那么现在我们就来聊一下这五个函数它们的使用方法,它们的不同之处以及在什么场景下去使

  • Kotlin中的高阶函数深入讲解

    前言 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x)).Kotlin为开发者提供了丰富的高阶函数,比如Standard.kt中的let.with.apply等,_Collectioins.kt中的forEach等.为了能够自如的使用这些高阶函数,我们有必要去了解这些高阶函数的使用方法. 函数类型 在介绍常见高阶函数的使用之前,有必要先了解函数类型,这对我们理解高阶函数很有帮助.Kotlin 使用

  • Java与kotlin详细对比

    在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言. 为什么选择 Kotlin? 简洁: 大大减少样板代码的数量. 安全: 避免空指针异常等整个类的错误. 互操作性: 充分利用 JVM.Android 和浏览器的现有库. 工具友好: 可用任何 Java IDE 或者使用命令行构建. 使用kotlin已经有一段时间了.打算从宏观上做一下java和kotlin的对比.java8虽然也有很多新特性,但是android低版本并不兼容.因此这里以旧版本

随机推荐