首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

干货|Kotlin入门第一课:从对比Java开始

如果Kotlin定义类时有参数列表,那么新建对象必须传入形参值,不像Java两种方式(1 先建一个无参对象,再通过set()来给属性赋值;2 直接通过参数列表创建对象)。...解释完变量定义关于空的概念,接下来就该看看这种保护机制能否真的让我们省心。就拿获取字串的长度为例,Kotlin中String类个length属性,即调用方式为strObject.length。...毕竟后者在变量是否null的情况下都能做出相应的处理。我所能想到的需要用”!!”的场景之一是:一个变量在声明时不能马上初始化,而在真正用到时又必须是非null的。...声明str的时候还需后面的处理结果给它赋值,而声明str2为非null,就必须以str!!的形式才能通过编译。 下面再给出Android中Application类单例化代码,就不做解释了。...如果遇到多个Button需要共享一个onClick()怎么办呢?

980110

Android:这是一份全面 & 详细的Kotlin入门学习指南

Kotlin中,一些观念是和Java存在较大区别的,一些基本观念需要注意的: 操作对象:在Kotlin中,所有变量的成员方法和属性都是对象,若无返回值则返回Unit对象,大多数情况下Uint可以省略...没有new关键字,所以直接创建类的实例: User() 对于构造函数,Kotlin中类可有一个主构造函数 & 多个次构造函数,下面将详细说明。...特别注意 一个函数,除了传入参数 & 返回值的情况,还会存在: 传入参数 & 无返回值 无传入参数 & 无返回值 // 传入参数 & 无返回值 // 模板: fun 函数名(参数名:参数类型...=0执行代码块1 // a=1执行代码块2 // a=2,3,执行代码块3 // a=其他值,执行代码块4 // 注意:when语句在满足条件的分支执行后,会终止when语句执行 for...可空类型与非空类型 * 在Kotlin中,两种情况最可能导致出现NullPointerException **/ // 情况1:显式调用 throw NullPointerException(

2.8K20

Carson带你学Android:这是一份全面 & 详细的Kotlin入门学习指南

Kotlin中,一些观念是和Java存在较大区别的,一些基本观念需要注意的: 操作对象:在Kotlin中,所有变量的成员方法和属性都是对象,若无返回值则返回Unit对象,大多数情况下Uint可以省略...没有new关键字,所以直接创建类的实例: User() 对于构造函数,Kotlin中类可有一个主构造函数 & 多个次构造函数,下面将详细说明。...特别注意 一个函数,除了传入参数 & 返回值的情况,还会存在: 传入参数 & 无返回值 无传入参数 & 无返回值 // 传入参数 & 无返回值 // 模板: fun 函数名(参数名:参数类型...=0执行代码块1 // a=1执行代码块2 // a=2,3,执行代码块3 // a=其他值,执行代码块4 // 注意:when语句在满足条件的分支执行后,会终止when语句执行 for...可空类型与非空类型 * 在Kotlin中,两种情况最可能导致出现NullPointerException **/ // 情况1:显式调用 throw NullPointerException(

2.1K20

Kotlin---协程(Coroutine)介绍

协程会在当前线程中建立协程的上下文环境,以保存当前执行的代码、栈帧、变量等等,协程切换,上下文环境也会切换,但是这些环境的切换仅仅只局限于应用层对于协程的调度,而不会陷入内核进行切换。...Kotlin中的协程也是通过线程池来实现的。而在Kotlin中,在线程之上也建立了在线程中类似于Looper+Handler的机制,让协程可以在多个线程中切换,以及进行数据的传递。...而使用CountDownLatch或者CyclicBarrier来检测已经完成任务的个数,会需要切换到A线程,进行自旋检测是否任务均已完成,而每次自旋,CPU都是打满的状态,无法执行其他有意义的任务...但是该协程需要等待,则协程会进行切换,但是切换的另一个协程还是运行在同一个线程中。但是也有可能协程会在多个线程中执行。所以数据必须要进行同步。...也就是:某个协程需要等待或者阻塞,它并不会导致线程的阻塞,而是会在当前线程保存当前协程的上下文环境(调用栈、执行代码偏移量等等),再获取下一个要执行的协程,切换上下文环境,执行该协程。

1.2K20

Kotlin与Java互操作

把一个平台值赋给一个Kotlin变量,可以依赖类型推断(该变量会具有所推断出的平台类型,如上例中item所具有的类型),或者选择我们所期望的类型(可空的或非空类型均可)。...把平台值传递给期待非空值等的Kotlin函数,也会触发一个断言。总的来说,编译器尽力阻止空值的传播(由于泛型的原因,有时这不可能完全消除)。...可空注解 由于泛型的原因,Kotlin在编译可能出现空异常,而使用空注解可以有效的解决这一情况。...对于每种原生类型的数组都有一个特化的类(IntArray、 DoubleArray、 CharArray 等等)来处理这种情况。...型变的泛型 Kotlin 的类使用了声明处型变,可以通过两种方式从Java代码中看到它们的用法。

3.4K30

号称取代 Java 的 Kotlin 语言到底是什么鬼?

Kotlin 代码必须调用 Java 代码,事情会变得很糟糕,比如库是用 Java 编写的,我相信这种情况很常见。于是第三种类型产生了,它被称为平台类型。...应该使用哪种类型来获得这个 Java 方法的结果呢?你三个选择。 第一种方法:你可以使用 String,代码看起来很安全,但是会抛出 NullPointerException 异常。...如果你多个存储库,在列表中很难实现正确的自动补全,这意味着你不得不手动输入完整的变量名称。...通常情况下,当你一个 Optional 的时候,你想要应用一系列无效的转换。...这里争议的是,默认情况下类是 final。也许 Java 程序员过度使用继承,也许应该在考虑扩展类之前考虑三次。

2.2K50

Android:关于Kotlin的入门语法指南(类、变量 & 函数)都总结在这里了!

基本观念 在Kotlin中,一些观念是和Java存在较大区别的,一些基本观念需要注意的: 1.1 操作对象 在Kotlin中,所有变量的成员方法和属性都是对象 若无返回值则返回Unit对象,大多数情况下...1.3 编译的角度 和Java一样,Kotlin同样基于JVM 区别在于:kotlin是静态类型语言,即所有变量和表达式类型在编译已确定 1.4 撰写 在Java中,使用分号“;”标志一句代码结束 在...补充说明:每种数据类型使用对应方法,可将其他类型转换成其他数据类型 toByte():Byte toShort():Short toInt():Int toLong():Long toFloat():...,只传无设默认值的参数 foo("abc") // 结果: abc 1 // 注:若有默认值的参数在无默认值的参数前,要略过默认值的参数去给无默认值的参数指定值,需用命名参数来指定值 // 默认值的参数...: hello 1 foo("hello") // 出现编译错误 4.3 特别注意 一个函数,除了传入参数 & 返回值的情况,还会存在: 传入参数 & 无返回值 无传入参数 & 无返回值 /

1.3K30

2023年WebAssembly 现状

与此同时,涉及开发者“渴望”使用哪种语言,Zig、Kotlin 和C#的受欢迎程度超过了当前的使用情况。...以下图表显示了长期趋势,比较了过去三次调查的结果,显示了每种语言的使用者比例(频繁或有时)——排除了<10%使用率的语言。...调查中的下一个问题探讨了每种语言多么受欢迎,问了这样一个问题:在将来开发利用WebAssembly 的应用程序时,你希望使用哪种语言?...将每种语言 "经常使用 "的响应数与 "希望经常使用 "的响应数之间的Δ值绘制成理想度曲线,我们可以看到哪些语言的理想度与使用率之间的差异最大: 在 Zig、Kotlin 和 C# 的一端,我们可以看到可取性超过了当前的使用率...Envoy和Istio都有一个 Wasm 插件API 用 Rust 编写的新集成开发环境 Lapce 拥有基于 WASI 的插件系统 在每种情况下,平台(终端、编辑器、飞行模拟器、代理)都能受益于允许终端用户在安全和隔离的环境中使用各种编程语言扩展功能

17710

Kotlin 1.2 新特性

例如,lambda表达式在构造一个对象,允许将延迟初始化属性作为构造参数传过去。...val button = findViewById(R.id.button) as Button 智能转换 一个变量为某个安全表达式(如校验非空)所赋值,智能转换也同样运用于这个安全调用的接收者。...foo(items = *intArrayOf(1)) 在这种情况下,一种优化可以消除冗余阵列的创建,从而防止性能下降。...其中,这里的MODE以下情况: disable (默认) - 以和Kotlin 1.0和1.1相同的方式生成字节码; enable - 为构造函数调用生成类似Java的字节码。...这可能会影响应用程序的整体性能;只有在多个类之间共享一些复杂的状态并在类初始化时更新才使用它。

1.7K100

JetBrains首席语言设计师:我们将如何让Kotlin再活几十年

Kotlin 中,对函数 listOf(1) 的调用会推断出 List 的结果类型,因为参数的类型给出了类型的提示。...添加一个新特性后,它就开始与所有其他语言特性进行交互。这些交互往往会产生很多极端情况。针对所有这些极端情况进行设计是非常耗时的,并且在缺少这些极端情况实际用例的情况下,设计往往会变得不可能。...弃    用 语言稳定且需要进行更改时,以完全向后兼容的方式进行更改通常是不可能或不切实际的,尤其是如果你有意修复一些旧的设计缺陷。...缺陷能严重到会使之前版本的编译器崩溃或生成的代码立即崩溃,这是幸运的。但有时,它确实可以工作,并且可能会产生一些代码来做一些明智的事情。...在某些情况下,更改的潜在影响不可忽略,迁移计划可能会跨越多个版本,并且可能会跨越多年。

1.5K10

Kotlin 负责人:我们是如何一步步设计 Kotlin 的?

Kotlin 语言已经了自己的传统和大量的代码,因此支持协程的新特性必须要适应现有的代码库,并且必须要能帮助现有的用户。...在 Kotlin 中,对函数 listOf(1) 的调用会推断出 List的结果类型,因为参数的类型给出了类型的提示。...5弃用 语言稳定且需要进行更改时,以完全向后兼容的方式进行更改通常是不可能或不切实际的,尤其是如果你有意修复一些旧的设计缺陷。...缺陷能严重到会使之前版本的编译器崩溃或生成的代码立即崩溃,这是幸运的。但有时,它确实可以工作,并且可能会产生一些代码来做一些明智的事情。...在某些情况下,更改的潜在影响不可忽略,迁移计划可能会跨越多个版本,并且可能会跨越多年。

1.2K20

Kotlin 开发中遇到的坑(持续更新)

因此,getStringExtra返回值为null,给mHomeWorkId赋值,就会报错。...我们在写这段代码的时候想的可能是:mUser不为null,而且年级不是-1的时候,通过条件判断,然后做一下操作。 但是在kotlin中,mUser为null,mUser?....= -1 ,在kotlin是成立的,这就不符合我们实际逻辑了。 解决方法如下:通过 ?: 操作,mUser等于null,给左边 一个默认值。 var mUser:User?...String 2、TODO 语句报错问题 在kotlin开发中,实现某个抽象方法,会自动生成一条TODO语句。...计算的消耗很少。 同时多次调用相同的返回值。 3.2、使用 lateinit 有些情况我们不能使用 val,比如,在 Android 中某些属性需要在 onCreate() 方法中初始化。

4.4K02

从 LiveData 迁移到 Kotlin 数据流

接下来我们一起比较 LiveData 和 Kotlin 数据流中相对应的写法吧: #1: 使用可变数据存储器暴露一次性操作的结果 这是一个经典的操作模式,其中您会使用协程的结果来改变状态容器: △ 将一次性操作的结果暴露给可变的数据容器...StateFlow 与 LiveData 是最接近的,因为: 它始终是值的。 它的值是唯一的。 它允许被多个观察者共用 (因此是共享的数据流)。...暴露 UI 的状态给视图,应该使用 StateFlow。这是一种安全和高效的观察者,专门用于容纳 UI 状态。...#5: 结合多种源: MediatorLiveData -> Flow.combine MediatorLiveData 允许您观察一个或多个数据源的变化情况,并根据得到的新数据进行相应的操作。...这个值非常有用,因为您可能并不想因为视图几秒钟不再监听就结束上游流。这种情况非常常见——比如当用户旋转设备,原来的视图会先被销毁,然后数秒钟内重建。

1.4K20
领券