开发中,序列化是常见操作,在java中,我们一般会用到Serializable或者Parcelable,优缺点就不赘述了,今天来看看kotlin中的序列化。...Parcelable 1.添加配置 app目录下的build.gradle文件 android { ......androidExtensions { experimental = true } } 2.添加注解并实现Parcelable @Parcelize data class User...3.泛型序列化 我们在实际开发中经常会对bean对象做抽取,这里就涉及到了泛型序列化。...@Parcelize data class BaseBean( val errorMsg: String, val errorCode: Int,
代码与Java代码主要有两点不同之处: 1、在类内部指代自身的this关键字,Java的完整写法是“类名.this”,而Kotlin的完整写法是“this@类名”,当然二者均可简写为“this”;...Parcelable类,就得重写包括writeToParcel、createFromParcel、newArray、describeContents在内的四个方法,可谓是兴师动众。...在第五章的类和对象中,介绍了Kotlin对数据类的写法,在类名前面关键字data,Kotlin即可自动提供get/set、equals、copy、toString等诸多方法。...那么序列化对象的改造也相当简单,仅需在类名之前增加一行注解“@Parcelize”就好了,整个类的Kotlin代码只有下面寥寥几行: @Parcelize data class MessageInfo(...,表示增加安卓插件的编译支持: //@Parcelize标记需要设置experimental = true androidExtensions { experimental = true } 编译文件修改完毕
我们在写这段代码的时候想的可能是:当mUser不为null,而且年级不是-1的时候,通过条件判断,然后做一下操作。 但是在kotlin中,当mUser为null时,mUser?....的方法: 3.1、用 val 而不是 var 在 Kotlin 中 val 代表只读,var 代表可变。建议尽可能多的使用 val。val 是线程安全的,并且不需要担心 null 的问题。...(birthDay, DateTime.now()) } 这也是 Kotlin 代码约定中所提到的,当具有下面列举的特点时使用属性,不然更推荐使用函数: 不会抛出异常。...上。 注意:不要相信 AS 编译器,使用快捷键 Override Method 时,还是需要额外关注参数是否 Nullable?...使用@Parcelize注解实现Parcelable 这里不介绍@Parcelize注解的具体使用,只记录使用过程中遇到的问题。
插件最初由 JetBrains 开发,我们也共同讨论了继续保留 synthetic 的利弊: 我们尽力确保在可行范围内对 API 的长期支持,但我们也希望为开发者提供指导,帮助开发者维护健康的代码库并最终赢得用户的满意...在接下来的一年里,我们的团队将共同弃用 synthetics,并继续支持我们建议的选项——"视图绑定 (View Binding)"。...但是,注解包将更改为 kotlinx.parcelize,并且在模块级 Gradle 文件中,您需要开始使用独立的 kotlin-parcelize 插件而非 android-kotlin-extensions...您可以在 Android 开发者官方网站 上找到有关 Parcelize 的文档。...长期来看,我们将继续保留 kotlin-parcelize 插件,您也可以继续在 Android Studio 问题追踪器 中提交有关 Parcelize 的问题。
最近我做了很多项目经常会碰到的“噩梦”之一就是NullPointerException(NPE),因为Java允许变量为null,而在调用对象方法或属性时未做null检查,就会抛出NPE。...这种情况在Kotlin里几乎不再是问题,因为Kotlin从语言层面引入了空安全支持,彻底减少了NPE的出现概率。下面我们看看两种语言是如何应对NPE的,通过示例展示常见的编程场景。...一、Kotlin 的可空类型和编译时检查几乎所有对象都可以为null,意味着我在调用任何方法时,都需要小心检查对象是否为空。...例如,以下代码会抛出NPE,因为 a可能为null:int getStringLength(String a) { return a.length(); // 如果a是null,就会抛出NPE}方案一...在日常开发中,Kotlin让代码更流畅、更安全,从Java转向Kotlin的开发者可以充分体验到空安全特性的便捷,减少了处理空值所带来的麻烦。
这篇文章介绍开发者用 31 天学习 Kotlin 的心得,深入浅出地介绍了 Kotlin 的一些基本特性以及高级用法,对处于不同阶段的 Kotlin 开发者来说,在提高开发效率和了解 Kotlin 提供一些参考...一个调用让您生成一个新的 bundle,它甚至可以处理 Arrays。 Day 9:Parcelize 喜欢 Parcelable 的速度,但不喜欢写所有的代码?和 @Parcelize 打个招呼。...用 require 在使用前可以检查它们,如果它们是无效的将会抛出 IllegalArgumentException。 您的封闭类的状态是否正确?可以使用 check 来验证。...如果检查的值为 false,它将抛出 IllegalStateException。 Day 19:内联 (InLine) 等不及要使用 lambdas 来生成一个新的接口?...Android 上 Kotlin 的另一个 DSL 是 Anko。Anko 允许您使用声明性代码构建 Android 视图。
Netty 服务端在收到客户端发来的消息后,能够做出相应的业务处理。在某些场景下,服务端也需要给客户端 App/网页发送消息。 二....channelFuture.isSuccess) { msgSend(msg) } }) Demo 可以通过 startServer 来启动 Socket 服务端,也可以在启动之前点击...App 也可以在启动之前点击 configClient 来修改要连接的服务端 IP 、端口。...总结 借助 Kotlin 的特性以及 Netty 框架,我们在 Android 上也实现了一个 Socket 服务端。...在实际生产环境中,我们采用的消息格式可能是 json ,因为 json 更加灵活,通过解析 json 获取消息的内容。
首先在代码阅读层面,对于有 Java 基础的程序员来说阅读 Kotlin 代码基本无障碍,除去一些操作符、一些顺序上的变化,整体上可以直接阅读。 其次在代码编写层面,仅需要改变一些编码习惯。...最后在学习方式层面,由于 Kotlin 最终都会被编译成字节码跑在 JVM 上,所以初入手时完全可以用 Java 作为对比。...在我看来,Kotlin 没有帮开发者解决了 NPE (Kotlin: 臣妾真的做不到啊),而是通过在语言层面增加各种强规则,强制开发者去自己处理可能的空指针问题,达到尽量减少(只能减少而无法完全避免)出现...三、强规则之下的 NPE 问题 在 Kotlin 这么严密的防御之下,NPE 问题是否已经被终结了呢?答案当然是否定的。...,后端没传该值就会抛出空指针异常。 2. 过分依赖 Kotlin 的空值检查 private lateinit var mUser: User ...
本文只讲部署过程,你首先要保证你的程序能在IDE里跑起来; 先看看你的application.properties中设置的端口号与你服务器上tomcat的端口号是否一致 server.port=80 (...boot,如果没这个东西,你只能手动启动你的应用才行 然后配置你的project structure ?...上面我选了两种打包形式,一种是war包(war包其实就是一个压缩包,他可以用解压工具解开) 一种是war包的exploded形式,就是war包里的内容放在一个文件夹里了 这里的war包会包含所有依赖的库...= 'com.ysl.jna.JnaApplicationKt' (目前我也不知道有没有真实起到作用) 打包的操作是在这里完成的 ?...之后你可以选择你要打包的形式(或者两种形式的包都打) ? 打包完成后,你会在你的项目子目录中找到打好的包 ? 然后把你想要的包上传到tomcat服务器上去就可以了
doSomething(); 通过这个语法,如果nullableUser是null的话,表达式就会直接返回null,而不是抛出一个NPE。...: handleNullError() 如果开发人员真的认为这段代码一定不应该存在null,一旦有了null,最好立刻抛出NPE,立刻修问题,可以这样做: nullableUser!!....doSomething(); kotlin的做法对实际的工程开发非常友好。不像Optional仅仅是提出了一个“优雅”但实际上难以用起来的方案。...kotlin给了开发者一个选择:对于null,到底是要严格对待(立刻抛NPE),还是容忍着对待(默认返回null或者自定义处理)。...提示一下:我先看的kotlin,再看的其他几门语言。因此,本文用kotlin举例子,并不代表C#,swfit和kotlin在这个功能的设计上谁先谁后。
: androidExtensions { experimental = true } @Parcelize data class User(val name: String) : Parcelable...writeToParcel,代表将当前对象写入到序列化结构中。...而Parcelable的实现就是基于这个Parcel容器,还记得刚才的几个方法吗: writeToParcel,写入数据到Parcel容器。 new User(in),从Parcel容器读取数据。...比如: Bundle.putParcelable, Intent putExtra(String name, Parcelable value) 等等吧,基本上对象传输的方法都支持了,所以这也是Parcelable...),并且每个对象有10个以上属性时,并且Serializable实现了writeObject()以及readObject(),在平均每台安卓设备上,Serializable序列化速度大于Parcelable
02 创建数据类实现Parcelable接口 前面简介中提到过,AIDL数据类通讯需要实现Parcelable接口,为了省去接口实现的代码,Kotlin中通过kotlin-parcelize即可实现了。...在build.gradle的plugins中加入id("kotlin-parcelize") 创建TestData数据类 package vac.test.aidlservice import android.os.Parcelable...import kotlinx.parcelize.Parcelize @Parcelize data class TestData(var code: String, var name: String...在aidl中使用了数据类TestData,所以Aidl文件和数据类的文件必须保证在同一包名下,并不是说放在同一文件夹下,实体类TestData文件在主Code文件夹下(java目录下),包名和aidl文件夹中放置...的设置,用到了viewbinding,这两个设置是在一想的,同时引用了basequickadapter。
e.toUpperCase();}).collect(Collectors.toList()); $6 ==> [A, B, C] jshell> alphabet alphabet ==> [a, b, c] Kotlin...b, c] >>> alphabet.map{it->it.toUpperCase()} [A, B, C] >>> alphabet [a, b, c] 相比之下, 我们不得不说,Java 8,9中的...不如Kotlin来得直截了当,简单优雅。 毕竟,Kotlin 是对 Java 语言的更高层次的抽象封装,相比之下, 只能是 “青出于蓝而胜于蓝”。...---- KotlinChina编程社区 微博 非常感谢 if (boy) { 帅气英俊潇洒} else { 魔鬼身材天使脸蛋美丽动人女神气质} 的您。大家请多支持!!!...您的支持,是我源源不断的写作的动力! 如果您有任何问题,欢迎随时与我交流~ ----
在带 Intel UHD 770 的设备上,使用旧版本驱动,即小于 30.0.101.1660 版本驱动,将会导致 WPF 的 3D 模块出现渲染异常。...此问题和 WPF 无关,此问题是 Intel 的 bug 且最新驱动版本已修复 官方问题记录地址:https://community.intel.com/t5/Graphics/Crash-with-UHD... 解决方法:只需更新 Intel 驱动即可 此问题已经在...2022 的 5 月结束战斗
应用大受欢迎,团队肯定备受鼓舞,于是决定把最棒的创意和功能添加进应用中,然后用户们会更加满意,如此循环……然而如此美妙的图景在现实中会遇到 "现实的问题": 代码量陡增,以及随之而来的开发和维护成本 代码中的错误也随之增加...Duolingo 是世界上最受欢迎的语言学习平台之一,也是 Google Play 上下载量最高的免费教育应用之一 (已突破 2 亿),为超过 3 亿名学习者提供可免费使用的语言学习服务。...△ Duolingo 代码量随时间的变化,绿色为 Kotlin 团队博客: 将 Duolingo 的 Android 100% 迁移至 Kotlin 总体而言,在迁移到 Kotlin 后,我们非常满意...,也很高兴看到 Kotlin 在我们公司和整个软件行业中的使用率不断增长!...例如,使用数据类和 Parcelize 插件: 一个在使用 Java 时需要手动编写 126 行代码的类,现在使用 Kotlin 只需编写 23 行,代码量减少了 80% 。
你可以使用字符串,代码看起来很安全,但是会抛出空指针异常。...// throws NPE when format() returns null println ("f.len : " + f.length) } 在我看来,Kotlin的类型系统中所有这些类似...可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白吗?这很简单。” 我很喜欢对象声明的概念——单例是种很有用的模式。...上面的代码可能会出错,从 parseInt() 中抛出 NPE。只有值存在的时候才能执行 Monad 风格的 map(),否则,null 只会简单的传递下去。这就是 map() 方便的原因。...Kotlin会让你深陷其中。事实上,Kotlin的语法更接近Scala。这是赌上全部。你将不得不忘记Java并切换到完全不同的语言。 相反,学习Groovy是一个愉快的旅程。Groovy亲手引领你。
空类型、空安全 为了解决类似NPE这类的问题,现代编程语言包括Kotlin解决这类问题的方法就是把运行时的错误转变成编译期的错误。...通过支持作为类型系统的一部分的可空性,编译器就能在编译期发现很多潜在的错误,从而减少运行时抛出异常的可能性 变量的定义 Kotlin中的变量修饰符只有两个 val修饰的变量不能重新被赋值 var修饰的变量可以被重新赋值...: 这个操作符表示在判断一个可空类型时,会返回一个我们自己设定好的默认值 !! 这个操作符在判断一个可空类型时,会抛出空指针异常 as? 这个操作符表示为安全的类型转换 !! 操作符 !!...操作符可谓是给爱好空引用异常的开发者使用,因为在使用一个可空类型变量时,在改后面加上!!操作符,会显示抛出的空指针异常 as?...**操作符则会返回null,但是不会抛出异常 总结 项目中会抛出空指针NullPointerException的情况 在可空类型变量的使用时,用了!!
在很早的时候,小黑屋就介绍过如何研究Kotlin,其中涉及到了查看字节码和反编译成Java代码的方式,相信很多人研究过的人,都会或多或少遇到过Intrinsics.checkParameterIsNotNull...出现空指针时抛出throwNpe的方法 判断对象相等的方法areEqual 其他的一些处理数据异常的方法和辅助方法 所以上面代码中的Intrinsics.checkParameterIsNotNull(...是的,你的这句话基本上没有毛病,但是有一个前提,那就是空指针和两种类型的特性,目前只在纯kotlin中生效,一旦涉及到和Java交互时,就不灵了。...比如我们在Java代码中这样调用,不会产生任何编译的问题。...非空断言时,会有校验非空断言结果的检查,如果有问题,则抛出NPE. 1 2 3 4 5 6 7 8 /** * if (message == null) { Intrinsics.throwNpe
: 0 } 上面的代码是错误的,parseInt() 会抛出 NPE 。map() 仅在有值时执行。否则,Null 就会跳过,这就是为什么 map() 如此方便。...Kotlin 会让你陷入深渊,事实上,Kotlin 的语法更接近 Scala。这是一项赌注,你将不得不忘记 Java 并切换到完全不同的语言。 相反,学习 Groovy 是一个愉快的过程。...Márton Braun 十分喜欢 Kotlin 编程,目前他在 StackOverflow 上 Kotlin 标签的最高用户列表中排名第三,并且是两个开源 Kotlin 库的创建者,最著名的是 MaterialDrawerKt...我不知道作者在使用什么 IntelliJ,但我使用的变量名称和类型都能够自动补全。对于参数,IntelliJ 甚至会给你提供相同类型的名称和类型的建议,这实际上比 Java 更好。...而且,为了获得它不必是单独的语言结构的好处,它只是一个任何人都可以实现的功能。 Maybe 如果你喜欢 Optional ,你可以使用它。 Kotlin 在 JVM 上运行。 对于代码确实这有些难看。
领取专属 10元无门槛券
手把手带您无忧上云