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

干货 | 携程机票 App KMM 跨端生产实践

类型,在 iOS 平台直接表示 Objective-C 的 MMKV 类型。...sealed class 及其大量的子类表示,且各个组件在判断数据的种类时都用 when 表达式逐个判断对象的类型是其父 sealed class 的哪一个子类。...版本后进入 stable 状态,届时 Kotlin/Native 的对象子图机制将提供开关以进行关闭,而开发者将通过协程的 Mutex 等机制来保障并发安全,未来可期。...= b as T } 这段代码本应该直接 crash,但运行后却奇迹般的打印出了“123”,也就是说,我们居然用 B 类型的对象调用了 A 类型的成员函数。出现这种离奇现象的唯一解释就是 a?....这个问题带来的另一个问题是,在 Kotlin 工程中,所有的 Kotlin 对象都无法获取自身的 class 对象。

3.7K10

解毒 Kotlin Koans: 02 震惊!你的 Java 代码居然被转换成了这样...

我们今天按照 Kotlin Koan 给出的顺序,要解毒的就是下面这道题: 把下面这段 Java 代码转换为 Kotlin 代码: public class JavaCode { public String...从此以后,我就成了 Kotlin 大神,反正只要用工具把 Java 代码转一下就好啦,还学什么学 >.<! 2....什么玩意,空指针啊 后来我就经常需要将原来用 Java 编写的 Activity 转换为 Kotlin 版本的,例如: public class TestActivity extends Activity...不过这代码你要是敢运行一遍,Crash 就敢恶心你一遍。savedInstanceState 这个参数可能为 null,显然类型定为 Bundle 有些不合适。...Kotlin 提供了一对注解来标注 Java 类型是否可空:@Nullable 和 @NotNull,Android Support Annotations 这个包也提供了一对:@Nullable 和

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

    干货 | Kotlin超棒的语言特性

    所有的对象都通过一个指针所持有,而指针只有两种类型:var 表示指针可变,val表示指针不可变。...这个特性将数字字面量,字符串字面量扩展到一般性对象中了。对应的场景是如果我们只需要“一个对象而已”,并不需要特殊超类型。...考虑下面四种场景: 在变量定义中,代表变量的类型 在类定义中,代表基类的类型 在函数定义中,代表函数返回值的类型 在匿名对象中,代表对象的类型 笼统来说,Kotlin的设计者应该就是想用冒号来笼统表示类型这一概念...箭头表示法是右结合的,(Int) -> (Int) -> Unit 等价于(Int) ->((Int) -> Unit),但不等于 ((Int) -> (Int)) -> Unit。...11 工具 对于初学Kotlin的开发者而言,编译器提供了贴心的小工具,甚至可以直接把Java代码转换成Kotlin代码。直接把Java代码拷贝到.kt文件中,编译器会弹出如下提示: ?

    1.5K40

    Kotlin服务端Spring Boot系列干货教程4 - Kotlin和Java比较

    字节码表示编程代码,一旦编译,就通过虚拟机而不是计算机的处理器运行。...通过使用这种方法,一旦编译并运行虚拟机,源代码就可以在任何平台上运行 Kotlin程序可以使用所有现有的Java框架和库,是的,Kotlin程序可以使用所有现有的Java框架和库,甚至依赖于注释处理的高级框架也是如此...将Java自动转换为Kotlin,JetBrains将IntelliJ集成了一个新功能,将Java转换为Kotlin,节省了大量的时间。而且它也节省了我们重新编写代码。...Kotlin的空安全性很好,现在摆脱NullPointerExceptions。这种类型的系统帮助我们避免空指针异常。...小技巧 如果不知道Kotlin怎么写时,可以写一个Java的,然后用Idea的Java代码转Kotlin功能转换一下 Kotlin的传参写法:str: String,名字在前,类型在后 ... ----

    1.1K10

    KMM 求生日记二:KotlinNative 被踩中的坑

    Java 所有类的根级父类是 Object,但是在 Kotlin/JVM 中,这两者是统一的,也就是说如果一段 Java 代码接收的参数类型是 Object,那我们仍然可以将任意一个 Kotlin 对象作为参数传入...上述差异导致的最严重问题就是 Kotlin/Native 类在 Kotlin 工程中拿不到 class 对象。在 Java 中所有类都有类型为 Class 的 class 对象,通过类名或该类的对象都可以直接获取。在 Kotlin/JVM 中,Kotlin 有自己的 KClass 类型,它与 Java 的 Class 类型不同,但是我们可以用 Any::class.java 的方式拿到一个 Kotlin 类的 Java class 对象。...而在 Kotlin/Native 中,KClass 无法获取一个类的 Objective-C 的 class 对象,这最直接的结果就是许多现有的 Objectice-C 库,可能含有需要传入一个 class

    2.7K10

    Kotlin学习笔记(一)-数据类型

    Boolean类型 val b:Boolean=true 定义类型格式 :访问修饰符 修饰符 对象名:类名=具体赋值 变量的修饰符有2种: val 不可变的属性声明 var 可变属性声明 val修饰类似于...类与对象 直接将理论还是不够直观,所以直接上代码: class 美女 private constructor(val 性格: String, val 长相: String, val 声音: String...这个方法每次创建对象都会被执行 只有次构造器那么构造方法可以重载 形参可以在方法中调用(如果val 声音: String去掉val这行会报错) java中所有类的父类是Object,Kotlin中所有类的父类是...关于强转如下: val chlidA: Chlid = parentB as Chlid//非安全强转失败crash val chlidB: Chlid?...Chlid//安全强转失败为null 总结: ◆ Java Style类型转换 val sub: SubClass = parent as SubClass 类似于Java的类型转换,失败则抛异常

    75910

    kotlin数据类型

    在数字值后面显式添加L表示一个Long类型 Float、Double浮点类型 Kotlin 中提供了 Float 和 Double 两种类型来分别表示单精度和双精度的浮点数类型。...//尾部加f或F显式表示这是一个Float类型的浮点数 Tips Kotlin 对于小数的默认推断是Double类型。...在数字值后面显式添加L表示一个Long类型 Float、Double浮点类型 Kotlin 中提供了 Float 和 Double 两种类型来分别表示单精度和双精度的浮点数类型。...//尾部加f或F显式表示这是一个Float类型的浮点数 Tips Kotlin 对于小数的默认推断是Double类型。...在数字值后面显式添加L表示一个Long类型 Float、Double浮点类型 Kotlin 中提供了 Float 和 Double 两种类型来分别表示单精度和双精度的浮点数类型。

    9910

    Kotlin 1.2 的新增特性

    如果调用一个返回类型参数 T 并将返回值转换为特定类型 Foo 的泛型方法,则编译器现在可以理解此调用的 T 需要绑定到 Foo 类型。...kotlin 包中) 同系列(但不包括常量)的函数也针对 Float 型参数提供了。...用于从位表示形式中转换为浮点数 Regex 类现在是可序列化的 kotlin.text.Regex 类已成为可序列化的类,现在可以在可序列化的层次结构中使用。...JavaScript 后端 默认启用对类型化数组(TypedArrays)的支持 JS typed arrays 支持将 Kotlin 基本数组(如 IntArray, DoubleArray)转换为JavaScript...工具 将警告视为错误 编译器现在提供了将所有警告视为错误的选项。在命令行中使用 -Werror,或使用以下的 Gradle 代码:

    2.8K70

    解读 美团外卖Android Crash治理之路

    本文讲述美团外卖Android客户端团队在将App的Crash率从千分之三做到万分之二过程中所做的大量实践工作,抛砖引玉,希望能够为其他团队提供一些经验和启发。...常见的Crash类型包括:空节点、角标越界、类型转换异常、实体对象没有序列化、数字转换异常、Activity或Service找不到等。...Activity承载了App的整个界面功能,Activity的泄漏同时也意味着它持有的大量资源对象都无法被回收,极其容易造成OOM。...Android Studio也提供了非常好用的Memory Profiler,堆转储和分配跟踪器功能可以帮我们迅速定位问题。...大图监控 上面讲到大对象是导致OOM的主要原因之一,而Bitmap是App里最常见的大对象类型,因此对占用内存过大的Bitmap对象的监控就很有必要了。

    1.1K20

    再谈协程之suspend到底挂起了啥

    ❞ 编译器将使用函数签名中的额外参数completion(Continuation类型)替换suspend修饰符,该参数将用于将suspend函数的结果传达给调用它的coroutine。...User对象将在添加的Continuation参数中被 "返回"。 suspend函数的字节码实际上返回 Any? 因为它是 (T | COROUTINE_SUSPENDED)的联合类型。...当使用suspendCoroutine或suspendCancellableCoroutine将基于回调的API转换为coroutine时(你应该总是倾向于使用这种方法),你直接与Continuation...这种表示法是由Coroutines 1.3.3版本生成的,在该库的未来版本中可能会发生变化。 ❞ Kotlin编译器将识别函数何时可以在内部suspend。...而不是原始函数的返回类型(即User)。 此外,编译器将创建一个私有类,1)持有所需的数据,2)递归地调用loginUser函数以恢复执行。你可以看看下面这个生成的类的近似值。

    95010

    kotlin基础语法

    Long 64 Int 32 Short 16 Byte 8 比较两个数字 在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。...类型转换 由于不同的表示方式,较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int 变量。...与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼。...使用 out 使得一个类型参数协变,协变类型参数只能用作输出,可以作为返回值类型但是无法作为入参的类型: in 使得一个类型参数逆变,逆变类型参数只能用作输入,可以作为入参的类型但是无法作为返回值的类型...如果你使用匿名对象作为公有函数的 返回类型或者用作公有属性的类型,那么该函数或属性的实际类型 会是匿名对象声明的超类型,如果你没有声明任何超类型,就会是 Any。在匿名对象 中添加的成员将无法访问。

    2.1K20

    开发者在线转换工具

    JSON 转 Flow:将JSON数据转换为Flow类型注解,增强JavaScript的类型检查。...JSON 转 io-ts:将JSON数据转换为io-ts格式,用于TypeScript的类型安全。...JSON 转 Kotlin:将JSON数据转换为Kotlin数据类,适应Kotlin语言开发需求。JSON 转 Protobuf:将JSON数据转换为Protobuf格式,适用于高效的二进制数据传输。...CSS 转 JS:将CSS代码转换为JavaScript对象格式,适用于CSS-in-JS解决方案。CSS 转 Tailwind:将CSS代码转换为Tailwind CSS实用类,简化样式管理。...结论这些在线转换工具为开发者提供了一种高效、便捷的解决方案,满足多样化的数据和代码格式转换需求。无论您是前端开发者还是后端开发者,这些工具都能帮助您提升工作效率,简化开发流程。

    37810

    Android平台的Swift—Kotlin

    ---------------- 一、 语法简洁,且吸收了很多其他语言的优点 大量的语法糖(有函数声明,类的创建,集合相关,范围运算符等等大量简洁的语法)、 Lambda表达式(Java8支持),简洁的函数表示法...变量类型可以根据变量值进行自动推导。这里Kotlin的基础类型都是对象,使用的是Java的包装类(基础类型包装成对象)。 2、定义函数 [3.png] 函数使用fun为关键字进行声明。...我们还可以使用Lambda表达式来表示函数参数。 [33.png] 2、泛型 泛型的存在主要是为了消除模板代码和类型转换安全, 在Kotlin中泛型的使用基本与Java是一致的。...Kotlin用于JavaScript: 使用kotlinc-js编译器将Kotlin代码转换为JavaScript(不是Kotlin或标准库的代码编译时会被忽略),Kotlin中提供了一些标准库用于JS...但是对Java的依赖和兼容性注定无法完全替换Java。 3、虽然获得Google认可,但是Kotlin语言的热度一直在逐渐下降,发文之前在TIOBE排行榜已经降至49位。

    3.5K90

    你造吗,null 也能 toString()!

    我把上面的代码改成了下面这样,想想也算是大无畏的革命精神嘛,我不 crash 谁 crash: Log.d(TAG, matchPoint.toString()) 我:大不了就 crash,谁怕谁 Kotlin...toString(): String 这,居然是个扩展方法,障眼法啊。如果遇到 receiver 为 null,那么就直接返回 null,可以可以,这很 Kotlin。...最初接触 Kotlin 的时候,确实有点儿不适应这种类型系统,写点儿代码好麻烦啊,怎么处处都得考虑变量是不是为空的问题 —— 虽然我很喜欢这个东西,当年知道 swift 有这样的特性的时候也曾羡慕不已...} ... } 再者,Kotlin 也提供了很多的扩展来帮助我们与可空类型“周旋”,例如: matchPoint?....: throw IllegalStateException() 如果你想很好的适应 Kotlin 的可空类型,你必须慢慢养成“多用不可空类型,多用只读变量”的习惯,Kotlin 提供了很好的语法特性让我们去适应这样的要求

    3.5K10

    Kotlin 1.4-M1 现已发布!

    如果您调用了将两个 SAM 接口作为参数的 Java 方法,两个参数需要都为 lambda 或常规对象。不可以将一个参数作为 lambda 而另一个参数作为对象来传递。...可调用的引用的智能转换 在 Kotlin 1.3 中,您无法访问智能转换类型的成员引用。...从浮动类型到 Byte 和 Short 转换的弃用 标准库包含将浮点数转换为整数类型的函数:toInt()、toShort()、toByte()。...这有助于确保仍在使用默认后端的用户不会受影响——假定他们已经将项目升级到 1.4-M1。 请注意,如果依赖项和您的项目使用 both 模式构建,仍然存在会导致 IDE 无法正常解析库引用的问题。...在 1.4-M1 中,我们会为您提供新的对象分配器,它在一些基准上能够以高达两倍的速度运行。

    3.5K20

    Kotlin与Java互操作

    当把一个平台值赋给一个Kotlin变量时,可以依赖类型推断(该变量会具有所推断出的平台类型,如上例中item所具有的类型),或者选择我们所期望的类型(可空的或非空类型均可)。...平台类型标识法 如上所述,平台类型不能在程序中显式表述,因此在语言中没有相应语法。 然而,编译器和 IDE 有时需要(在错误信息中、参数信息中等)显示他们,Koltin提供助记符来表示他们: T!...可针对 JSR-305 注解编译库,但不需要为库的消费者将注解构件(如 jsr305.jar)指定为编译依赖。Kotlin 编译器可以从库中读取 JSR-305 注解,并不需要该注解出现在类路径中。...,那么可以通过使用将Lambda表达式转换为特定的SAM类型的适配器函数来选择需要调用的方法。...此功能只适用于Java互操作;因为Kotlin具有合适的函数类型,所以不需要将函数自动转换为Kotlin接口的实现,因此不受支持。

    3.5K30

    6.变量声明与基本类型(Primitive Type)

    但因为写起来比基本类型麻烦,且考虑性能问题,导致如果不是限定场景,大家都不会主动用它们。 而 Kotlin 为了提供完全面向对象的特性,摒弃了基本类型。...shit,因为 Java 的装箱类是集成在 JDK 的,无法随着 Kotlin 版本更新而更新。...,这个时候无法使用 jvm 的基本类型结构。...而我们观察 kotlin.Int 时,可以看到除了数学运算的运算符重载方法,和强转的方法(toFloat,toLong 等)外,就没有其他方法了,而这些方法都可以直接对应基本类型运算的操作。...kotlin.Int 声明为这样一个简洁的数值封装类,让转换为 jvm 字节码的基本类型铺平道路。 所以使用 kotlin 的数值类型时,绝大部分场景下,不会有额外的性能开销。

    1.1K30

    美团外卖Android Crash治理之路

    本文讲述美团外卖Android客户端团队在将App的Crash率从千分之三做到万分之二过程中所做的大量实践工作,抛砖引玉,希望能够为其他团队提供一些经验和启发。...常见的Crash类型包括:空节点、角标越界、类型转换异常、实体对象没有序列化、数字转换异常、Activity或Service找不到等。...Activity承载了App的整个界面功能,Activity的泄漏同时也意味着它持有的大量资源对象都无法被回收,极其容易造成OOM。...Android Studio也提供了非常好用的Memory Profiler,堆转储和分配跟踪器功能可以帮我们迅速定位问题。...大图监控 上面讲到大对象是导致OOM的主要原因之一,而Bitmap是App里最常见的大对象类型,因此对占用内存过大的Bitmap对象的监控就很有必要了。

    1.2K30

    Kotlin入门潜修之类和对象篇—泛型及其原理

    get返回的Object类型可以转换为Integer。因为map中存放的实际类型就是Integer类型。...));//无法添加自定义Test2类型对象 list.add("test");//无法添加字符串类型 } static void test2(List类型为其超类、本身以及没有泛型类型的赋值,其中没有泛型类型赋值时会有编译警告。 2.对于读写操作。无界通配符无法添加除了null以外的任何对象。...super T>来说,表示的是T及其T的超类类型,如果是T的子类那么一定也是T的超类的子类,所以将子类元素添加到容器是允许的,因为取出来的时候一定符合T或者T的超类类型。...正式基于上面的考虑,kotlin为我们提供了星号映射,其修饰符为*。

    93930
    领券