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

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

我们在写这段代码的时候想的可能是:当mUser不为null,而且年级不是-1的时候,通过条件判断,然后做一下操作。 但是在kotlin中,当mUsernull,mUser?....特别是在多线程开发环境中,而java代码又缺少了对null的强检查,这就更容易会出现异常了。下面给大家减少及个避免 !!...代码约定中所提到的,当具有下面列举的特点使用属性,不然更推荐使用函数: 不会抛出异常。...使用 DataClass 编译器会默默地帮我们生成一些函数。...原因是:Person在被转Java代码,只会生成一个包含两个参数的构造方法,没有提供默认的构造方法。Gson在通过反射创建对象,会优先尝试获取无参构造函数。

4.4K02

Android使用ViewBinding

ViewBinding 使用了编译生成的绑定类,在 xml 布局文件中的每个视图都会生成一个对应的绑定类对象,因此在编译检测到视图名称的错误。...ViewBinding 可以生成类型安全的代码,避免了手动查找和强制转换视图对象的麻烦。 ViewBinding 不会增加 APK 大小,因为它只是编译生成代码。...在多个模块中引用同一个视图可能会出现命名冲突的问题,需要通过手动指定全限定名解决。...Kotlin扩展: Kotlin扩展 是 Kotlin 语言的特性,其通过扩展函数的方式,允许开发者现有的类添加新的函数或属性。...总体而言 ViewBinding 在类型安全性和编译错误检测方面比 Kotlin扩展 更好。 它是官方推荐的方式,并且可以避免一些潜在的运行时异常

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

TeamCity VS Jenkins:选择正确的CI CD工具

在撰写本文TeamCity的最新版本2020.1。此版本支持条件构建步骤,您也可以在Kubernetes集群中启动构建代理。...使用TeamCity,您可以通过多种方式进行自定义,交互和扩展服务器。有一些选项可以通过RESTful API执行交互,使用构建脚本中的服务消息,以及使用Open APITeamCity创建插件。...由于插件的范围从构建工具到特定于语言的开发工具,它使自定义任务简单且具有成本效益,因为您不需要昂贵的内部自定义。 4.云与密钥集成 TeamCity通过插件和非捆绑插件提供与流行的云解决方案的集成。...TeamCity的用户还提到Jenkins在并行性方面更加友好。 Jenkins支持并行构建,但是它们共享相同的环境,这可能导致共享资源出现问题。...还有其他的选择-一个创业陡峭的50%的折扣,并免费开源项目。有关TeamCity定价的更多详细信息,请参见此处。

6.7K10

Kotlin 1.4-M1 现已发布!

Kotlin/JVM 编译器现在可在字节码中 Java 8 和更高版本生成类型注解。 ☞Kotlin/JS 的新后端为生成的工件带来大幅提升。...Kotlin 函数和接口的 SAM 转换 SAM 转换让您可以在预期出现一个包含“单抽象方法”的接口传递 lambda。...请注意,当目标新的 IR 编译器后端(更多详细信息如下) ,produceExecutable() 会始终按目标生成一个单独的 .js 文件。 当前,不支持在多个生成的工件之间删除重复或拆分代码。...生成代码能够更好地与静态分析器一同使用,甚至还可以通过 Google 的 Closure Compiler 从新 IR 编译器后端运行生成代码,并使用它的高级模式优化(请注意,Kotlin/JS Gradle...因此,要使 Swift 代码感知预期的异常Kotlin 函数应使用 @Throws 注解标记,此注解会指定一系列潜在的异常类。

3.4K20

Kotlin —— 这次入门就不用放弃了

你可以编写少得多的代码。 它更加安全:Kotlin是空安全的,也就是说在我们编译时期就处理了各种null的情况,避免了执行时异常。你可以节约很多调试空指针异常的时间,解决掉null引发的bug。...Kotlin,而且之前的 Java 代码中定义了大量的公开域(这在定义常量的时候很常见),你会惊奇的发现最终编译生成的方法数量大幅上升。...如果你的 Android 应用快接近方法数限制了,我建议你不需要自定义 getter 方法的常量加上 @JvmField 注解。这样会阻止 getters 方法的生成,从而减少你的方法数。...Kotlin异常机制,但不要求你在函数的类型里面声明可能出现异常类型,也不使用静态类型系统对异常的处理进行检查和验证。...在这种疑虑的情况下,你就不得不做最坏的打算,你就得把代码写成: try { foo() } catch (e:Exception) { printf(e) } 因为不知道 foo 函数里面会有什么异常出现

1.6K30

Kotlin与Java互操作

(普通 Java 对象) 当调用平台类型变量的方法Kotlin不会在编译时报告可空性错误,但是在运行时调用可能会失败,因为空指针异常。...可空注解 由于泛型的原因,Kotlin编译可能出现异常,而使用空注解可以有效的解决这一情况。...可针对 JSR-305 注解编译库,但不需要为库的消费者将注解构件(如 jsr305.jar)指定为编译依赖。Kotlin 编译器可以从库中读取 JSR-305 注解,并不需要该注解出现在类路径中。...AllOpen是所标注的类去掉final,目的是为了使该类允许被继承,且支持Spring注解,如@Componet;支持自定义注解类型,如@Poko。...JVM 字节代码编译器会优化对数组的访问,这样就不会引入任何开销。

3.4K30

使用注解自动生成代码

于是小明发明了一套基于 Annotation Processor 和编译注解实现的自动生成工厂类代码的方案 首先自定义一个注解类 @CarAnnotation @Target(AnnotationTarget.CLASS...如果注解和注解处理器放在同一个 module 里,那么主工程就需要 implementation 这个 module,但是注解处理器只在编译需要用到,相关的代码其实是不需要参与到 apk 打包里面的,...kotlin-kapt' } 复制代码 自定义注解 元注解(作用在注解上面的注解): @Target 定义注解可使用的范围,可以是类、方法、属性、变量等等 Retention 定义注解保留的范围,有源代码...、编译、运行时三种 MustBeDocumented 是否可生成在 Doc 里面 Java 定义注解的方式 @Documented @Retention(RetentionPolicy.RUNTIME...编译器首先会读取 Java/Kotin 源文件,然后查看文件中是否有使用注解,如果有使用,则调用其对应的注释处理器,这个注解处理器(可能会)生成新的带有注解的 Java 源文件,生成的新文件也会参与编译

88500

Kotlin Primer·第三章·Kotlin 与 Java 混编

虽然 Kotlin 的开发很方便,但当你与他人协作,总会碰到 Java 与 Kotlin 代码共存的代码项目。 本章就教你如何优雅的实现 Kotlin 与 Java 混合编程。...: "" 这段代码在正常debug模式编译运行完全正常,但是一旦执行混淆,就会发生所在函数被移除的现象。 但是如果改写以下写法就能正常运行: var str = some?.s?.d ?...为了兼容 Java,Kotlin 默认会将所有的包级别函数放在一个自动生成的叫ExampleKt的类中, 在 Java 中想要调用包级别函数,需要通过这个类来调用。...当然,也是可以自定义的,你只需要通过注解@file:JvmName("Example")即可将当前文件中的所有包级别函数放到一个自动生成的名为 Example 的类中。...其内部原因在于 Kotlin 每个非空类型加了断言,如果传入空值则会立刻抛出异常

1.4K20

(三)组件治理之编译期检查

、NoSuchFieldError 与 AbstractMethodError 等异常提前在编译期间卡住。...里面的 Class 文件,并收集出 Class 文件的字段、方法等信息,然后存到一个以 ClassName key 的 map 集合中,方便后面在分析 Class 文件可以直接判断引用的类是否存在...3、生成的组件引用关系图的一部分: image.png 5、一些小插曲: AbstractMethodError 异常主要是检测没有实现父类的抽象方法,起初以为这个检查挺简单的,但在一路思考之后发现,...我以为终于解决所有问题了,但在检查结果发现,还是有一些情况没有检测到,这个问题就真的离了大谱了,Java 编译出来的 class 是没问题的,问题出现在了 Kotlin 上面。...在 Kotlin 中,接口继承接口,也是可以实现父类的抽象方法,效果看起来跟 Java 的 default 类似,示例如下: Dog 接口实现了父类 IAnimal 接口的抽象 run 方法,代码上来看并没有问题

19130

Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )

一、Kotlin 的空安全机制 ---- Java 中的空指针问题 : 在 Java 语言 编写的程序中 , 出现最多的崩溃就是 NullPointerException 空指针异常 , 该异常是 运行时...才爆出的 , 在 代码编写 以及 编译期 很难提前排查出来 ; Kotlin 的空安全机制 : 在 Kotlin 语言 中 , 针对 空指针异常 问题 进行了优化 , 引入了 空安全机制 , 在代码编写后的...编译期 , 就可以 提前排查出可能出现的空指针异常问题 , 并提前进行处理 , 这样极大地提高了 Kotlin 程序的 代码健壮性 ; 二、变量可空性 ---- 1、默认变量不可赋空值 在 Java...空指针异常 出现的概率 ; 代码示例 : 先定义一个 name 变量 , 其赋值字符串 "Tom" , 然后再为其赋值 null 空值 ; fun main() { var name = "...2、抛出自定义异常 抛出自定义异常代码示例 : 在下面的代码中 , 声明了自定义 异常类 MyException , 其继承了 KotlinNullPointerException 空指针异常类 ,

1.7K10

Java 近期新闻:虚拟线程、JReleaser 1.0、Loom 项目、关于 Spring4Shell 的供应商声明

Jakarta EE Starter Jakarta EE Ambassadors 已经推出了 Jakarta Starter 实用程序的 1.0 版,这是一个 Maven 原型,可以生成示例代码以构建简单的...JetBrains 关于 JetBrains 产品的声明: 我们与产品团队一起对 JetBrains Web 应用程序进行了审计,包括的产品有:YouTrack、Hub、TeamCity、Space,...请参考以下有关 TeamCity、Hub 和 YouTrack 的技术讨论。...Kotlin JetBrains 发布了 Kotlin 1.6.20,其特性包括:支持在 Kotlin/JVM 中定义上下文相关的声明;改进了与通用 Java 类和接口的互操作性;在 JVM IR 后端并行编译单个模块...,从而加快了构建时间;通过 Kotlin/JS IR 中的增量编译,简化了开发体验;Kotlin/Native 性能的改进;由于多平台项目的层次结构,改进了代码共享。

98020

Kotlin京东业务实战 | 强大又简洁的JVM语言

上图是Java编译器的编译过程,Kotlin和Java的编译过程是很相似的,区别在于Kotlin与Java相比重要的细节在编译后端(目标代码生成)环节。...Kotlin编译器在目标代码生成环节做了很多类似于Java封装的事情,比如自动生成Getter/Setter代码生成、Companion转变成静态类、修改类属性final不可继承(open修饰即可继承...= null b、代码编译出错,变量可以为空,使用变量需要加?...修饰符,自动判断是否空,防止出现空指针异常 viewHolder.mCouponItemValueDiscount.text = entity.quota viewHolder.mCouponItemValuePrice.text...>>>> 常见问题 环境配置出错,出现无法编译编译正常但apk中无kotlin代码,运行时报kotlin代码找不到; 解决方法:在插件代码中配置kotlin环境,在gradle中增加classpath

1.6K00

Kotlin学习笔记

声明对象(包括方法的参数): 把"?"跟在类名后面,表示这个对象允许null; 把"!!"跟在类名后面,表示这个对象不允许null; 2. 调用对象: 把"?"...跟在对象后面,表示如果null,程序就会视而不见,不会空指针。 把"!!"跟在对象后面,表示如果null,那么系统会报异常。...size > 0) { Log.d("TAG", "-->> 房间数不是0") } 编译器会告诉我们:当roomListnull的,它的size返回就是"null",但是"null...= null)这种Java常见语句才能避免异常吗? 不过Kotlin不会让程序出现这种啰嗦的代码,所以里面提供了对象A ?: 对象B表达式, ?...如果所在的Kotlin文件名被修改,编译生成的类名也会被修改,可以通过注解的方式来固定编译生成的类名: @file:JvmName("StringFunctions") package stringsfun

1.9K30

JetBrains用Kotlin布了一个大局

以下观点来自Vasiliy Zukanov的博客,并经过大码农编译总结。如果要查看原文,请点击文末的“查看原文”。...相信每个人都学过几门编程语言,在开始学习一门新语言,确实会有一段时间难以看懂代码,但随着阅读代码量的增加,逐渐熟悉了这门语言之后,就不会被语法方面的东西牵绊住了。...那些不愿意掏钱个人项目购买IntelliJ许可的开发者完全可以使用开源的IDE代替,比如Eclipse、Atom等等。所以说,JetBrains可能面临流失用户的风险,因为用户有太多可选择的IDE。...不仅如此,如果出现了一门新语言,大家蜂拥而上,那么JetBrains能够分到的市场份额可能更小了。...除了IDE产品,JetBrains还推出了持续集成服务器产品TeamCity和问题跟踪系统YouTrack等。一般来说,使用了Kotlin和IntelliJ的用户也很有可能会使用他们家的其他产品。

704100

Kotlin 1.2 的新增特性

在为特定平台编译多平台项目,会生成通用及特定平台相关部分的代码。 多平台项目支持的一个关键特性是可以通过 expected 以及 actual 声明来表达通用代码对平台特定部分的依赖关系。...弃用:数据类的覆写性拷贝 当从已经具有相同签名的拷贝函数的类型派生数据类数据类生成的 copy 实现使用父类型的默认函数,会导致出现与预期相反的行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突的继承已经被...为了减少使用此类字节码处理工具的用户的这个问题,我们添加了一个命令行选项 (-Xnormalize-constructor-calls=MODE),它会告诉编译这样的结构生成更多的类 Java 字节码...这里 MODE 的值是以下之一: disable (默认值)—— 以和 Kotlin 1.0 和 1.1 相同的方式生成字节码 enable —— 构造函数调用生成类 Java 字节码。...Kotlin 1.2 在调用点强制执行此检查,如果接收方为空,则抛出异常。 要切换到旧行为,请将 fallback 标志 -Xno-receiver-assertions 传递给编译器。

2.8K70

是时候使用Kotlin编程了

2,安全性 Kotlin提供了安全符“?”,当变量可以为null,必须使用可空安全符?进行声明,否则会出现编译错误。...这跟Java文件通过Java编译编译生成的字节码几乎没有区别,这样JVM就能直接识别和处理Kotlin代码的功能和逻辑。...当Kotlin调用Java代码Kotlin编译器会对调用的Java文件进行分析,以便kt文件能够生成正确的class文件。为什么这么说呢?...而当在Java代码中调用Kotlin对象Kotlin生成的class文件也要输入到Java编译器,这时Java文件才能生成正确的class文件。...自定义异常 4.11.3 try表达式 4.11.4 throw表达式 4.11.4 受检异常 4.12小结 第5章 类与接口 5.1 类 5.1.1 类的申明 5.1.2 构造函数 5.1.3 类的实例

3.2K10

Kotlin 1.2 的新增了哪些特性?

在为特定平台编译多平台项目,会生成通用及特定平台相关部分的代码。 多平台项目支持的一个关键特性是可以通过 expected 以及 actual 声明来表达通用代码对平台特定部分的依赖关系。...弃用:数据类的覆写性拷贝 当从已经具有相同签名的拷贝函数的类型派生数据类数据类生成的 copy 实现使用父类型的默认函数,会导致出现与预期相反的行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突的继承已经被...为了减少使用此类字节码处理工具的用户的这个问题,我们添加了一个命令行选项 (-Xnormalize-constructor-calls=MODE),它会告诉编译这样的结构生成更多的类 Java 字节码...这里 MODE 的值是以下之一: disable (默认值)—— 以和 Kotlin 1.0 和 1.1 相同的方式生成字节码 enable —— 构造函数调用生成类 Java 字节码。...Kotlin 1.2 在调用点强制执行此检查,如果接收方为空,则抛出异常。 要切换到旧行为,请将 fallback 标志 -Xno-receiver-assertions 传递给编译器。

2.8K10

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

= null) { 3 //do something 4 } 对于Java代码编译器不会强制每次使用引用变量之前进行null判断,即异常往往会在运行时报出,但这正是危险所在。...表示不允许null; 第2行,编译通过,作第一行代码的另一种情况,加了问号,并赋值null; 第3行,编译通过,隐式赋值”testNull”,Kotlin会自动推断出str3类型String,之后便不可再更改了...解释完变量定义关于空的概念,接下来就该看看这种保护机制能否真的让我们省心。就拿获取字串的长度例,Kotlin中String类有个length属性,即调用方式strObject.length。...有两种形式定义的变量不用担心(1 类型String且不允许null;2 类中不包含length属性), 理由很简单,前者不会出现null异常,后者获取length属性在编译阶段就会出错,或者说在敲完代码编译器就会标红提示了...所以,String类型但允许null的才需要我们关注,因为这时候有可能出现运行时异常。 对于声明为String?的变量,访问属性时会涉及到问号和双感叹号两个操作符(”?”和”!!”)

987110
领券