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

【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )

文章目录 一、Kotlin 变量可空性 1、Java 与 Kotlin 空值处理区别 2、Java 函数返回非空值和控制 3、Kotlin 函数调用 Java 函数 4、平台类型 5、@NotNull...3、使用 @JvmName 注解修改 Kotlin 生成的 Java 类名 一、Kotlin 变量可空性 ---- 1、Java 与 Kotlin 空值处理区别 在 Java 语言 中 , 任何 引用类型变量...默认情况下 所有的变量 都为 非空类型 ; 下面分别定义一个 Java 类 和 Kotlin 脚本 , 在 Kotlin 脚本调用调用 Java 类的成员 ; 2、Java 函数返回非空值和控制 代码示例...不知道 这个变量 是否为空 , 这种变量的类型 就称为 " 平台类型 " ; 所有的 平台类型 变量 都是 可空的 , Kotlin 会将其自动推断为 可空类型 ; 调用 平台类型 变量 的成员时 ,...将字节码 反编译回 Java 代码 , 由下面的代码可知 , 在 Hello.kt 脚本 中 定义 sayHello 函数 , 其对应的 字节码 反编译 后 的 Java 代码 如下 : import

1.6K20

《Kotlin 程序设计》第九章 Kotlin与Java混合调用

1 使用工具互相转换 1.1 将 Java 转换为 Kotlin 如果你之前使用 Java 语言而没有 Kotlin 开发经验,不用担心,Intellij IDEA 会帮你一键转换,将 Java 代码转换成...1.2 将 Kotlin 转换为 Java 另外,通过IDEA的Kotlin插件,可以直接把Kotlin代码ByteCode反编译成Java代码(虽然这个反编译后的Java代码不是那么的的原汁原味)。...var a: String = "abcd" a = null //编译错误 如果要允许为空,我们需要手动声明一个变量为可空字符串类型,写为String? var a: String?...对变量进行了NotNull注解。...翻译成Java代码: @NotNull String a = "abcd" 不仅如此,为了避免NPE异常,Kotlin做了一件很有趣的事:当你允许属性可空时,Kotlin编译器将不允许你在未经检查的情况下引用它

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

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

    : "empty" /** 如果user为可空类型,又一定要调用它的成员函数和变量,可以用!!...如下 UI().setContentView(this@LoginActivity) 其中,dip(10),表示将10dp转换为像素的意思,是Anko的扩展函数,说到扩展函数,我发现Kotlin源码里大量地使用扩展函数...和 Java 不一样,Kotlin 没有提供单独定义域的方式。你必须使用 val 或者 var 来声明变量。...编译速度对比 我不会试图比较一行代码的编译速度;相反,比较的是将代码从Java转换为Kotlin是否会影响其总体构建的时间。...所以Kotlin编译在完整代码情况下比Java慢一点。 但是你通常只会对几个文件进行更改后编译,所以,我们来看看Kotlin在增量编译是否可以赶上Java。 增量编译 ? ? ?

    1.7K30

    Better Kotlin

    这也是南尘最开始喜欢使用的方式,没有技术却有一颗装 ✘ 的内心,直接写成 Java 文件,再直接一键转换为 Kotlin。...但将这段简洁的 Kotlin 代码转换为等同的 Java 代码后,却显的晦涩难懂。...核心意思是:Kotlin 使用 object 代替 Java 匿名内部类实现。 很明显,即便如此,这里的访问应该也是合情合理的。从匿名内部类中访问成员变量在 Java 语言中是完全允许的。...7 注意 Kotlin 的可空和不可空 最近闹了一个笑话,在项目中需要写一个上传跳绳数据的功能。于是有了下面的代码。...仔细一看,发现 Java 编写这个接口的时候,会被认为这个参数 "data" 对应的 "value" 是可以为 null 的,而改为 Kotlin 后,由于 Kotlin 默认不为空的机制,所以需要的参数是一个不可以为

    1.3K20

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

    我们今天按照 Kotlin Koan 给出的顺序,要解毒的就是下面这道题: 把下面这段 Java 代码转换为 Kotlin 代码: public class JavaCode { public String...从此以后,我就成了 Kotlin 大神,反正只要用工具把 Java 代码转一下就好啦,还学什么学 >.<! 2....什么玩意,空指针啊 后来我就经常需要将原来用 Java 编写的 Activity 转换为 Kotlin 版本的,例如: public class TestActivity extends Activity...对于平台类型(Platform Type),很多时候转换工具是无从得知它是否可能为空的,毕竟 Java 没有对此作出过任何承诺。 怎么办?...Kotlin 提供了一对注解来标注 Java 类型是否可空:@Nullable 和 @NotNull,Android Support Annotations 这个包也提供了一对:@Nullable 和

    73520

    Kotlin的互操作——Kotlin与Java互相调用

    ② 空安全类型 Kotlin的空安全类型的原理是,Kotlin在编译过程中会增加一个函数调用,对参数类型或者返回类型进行控制,开发者可以在开发时通过注解@Nullable和@NotNull方式来弥补Java...[0]//推断为平台类型(普通Java对象) 当调用平台类型变量的方法时,Kotlin不会在编译时报告可空性错误,但是在运行时调用可能会失败,因为空指针异常。...当把一个平台值赋给一个Kotlin变量时,可以依赖类型推断(该变量会具有所推断出的平台类型,如上例中item所具有的类型),或者选择我们所期望的类型(可空的或非空类型均可)。...=item//允许,没有问题 Val notNull:String=item//允许,运行时可能失败 如果选择非空类型,编译器会在赋值时触发一个断言,这样可以防止Kotlin的非空变量保存空值。...【例5】将Kotlin变量编译成Java中的变量声明。

    3.8K10

    谈谈Kotlin:Kotlin每一行代码都有返回值

    看下let语法糖的函数声明:public inline fun T.let(block: (T) -> R): R 结合实现,可以看到,let会在block执行完后,返回block的返回值...而Kotlin和Java不同,在Kotlin里每一行代码都是表达式,也就是说每一行代码执行完毕后都有一个返回值。 接下来考虑如下例子: // 例1:可空变量为空 val nullVal: Any?...: run { println("[nullVal] null code block") } // 例2:可空变量为非空 val notnull: Any?...= if (count % 2 == 0) null else Any() 一旦命中这样的坑,查起来挺费劲的 QAQ 掉过这样的坑后,就会发现朴素的if (xxx !...Tips 介绍一个小技巧: IDEA编辑器提供了快速判空的模板,在变量后输入.nn回车。 就能收获如下代码。 PS:nn是notnull的缩写,输入.notnull也有同样的功效。

    96060

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

    1、空类型安全 1.1、可空类型正确用法 kotlin是强类型判断的,每一个对象都有可以为空和不可以为空之分。...as的推荐写法: //正确写法,转换失败自动转换为空对象 var strAble = text as?...对于 Null 的检查是 Kotlin 的特点之一。强制你在编码过程中考虑变量是否可为 null,因此可以避免很多在 Java 中隐藏的 NullPointerException。!!...secondaryList[0] } 但是,当你用插件直接将 Java 代码转换为 Kotlin 时,你会发现有很多 !! 在里面。但其实 !!...原因是:Person在被转Java代码时,只会生成一个包含两个参数的构造方法,没有提供默认的构造方法。Gson在通过反射创建对象时,会优先尝试获取无参构造函数。

    4.6K02

    Kotlin与Java互操作

    item = list[0] // 推断为平台类型(普通 Java 对象) 当调用平台类型变量的方法时,Kotlin不会在编译时报告可空性错误,但是在运行时调用可能会失败,因为空指针异常。...当把一个平台值赋给一个Kotlin变量时,可以依赖类型推断(该变量会具有所推断出的平台类型,如上例中item所具有的类型),或者选择我们所期望的类型(可空的或非空类型均可)。...=item//允许,没有问题 Val notNull:String=item//允许,运行时可能失败 如果选择非空类型,编译器会在赋值时触发一个断言,这样可以防止Kotlin的非空变量保存空值。...例如,将Kotlin变量编译成Java中的变量声明。...使用@JvmField注解标注后,该字段将具有与底层属性相同的可见性。

    3.5K30

    《Kotlin 极简教程 》第4章 基本数据类型与类型系统

    Kotlin的类型系统和Java相比,首要的区别就是Kotlin对可空类型的显式支持。 在本节中,我们将讨论Kotlin中的可空类型。...4.5.2 Kotlin中的null 在Kotlin中,针对Java中的null的杂乱局面,进行了整顿,作了清晰的界定,并在编译器级别强制规范了可空null变量类型的使用。...来声明一个可以指向空指针的变量。 可空类型可以用来标记任何一个变量,来表明这个变量是可空的(Nullable)。例如: Char?, Int?, MineType?(自定义的类型)等等。...@NotNull标注不可空的变量,使用注解@Nullable标注一个变量可空。...可空变量的安全调用符y?.length 等价的Java代码就是: y != null?Integer.valueOf(y.length()):null 可空变量的断言调用y!!.

    2.3K20

    Kotlin 类声明和构造器(constructor)

    **Java 构造器成员变量如果依赖构造参数,它们的声明和最终赋值是分离的,同一个成员变量的代码是低内聚的。...使用 let 闭包后,成员变量的所有的初始化代码都可以写在闭包内。不同的成员变量初始化代码相互独立,代码是低耦合的; 3....这样的设计一是为了 Java 转 Kotlin 代码时能兼容旧代码结构,不用重构也能直接转换为 Kotlin 代码;二也方便了 Java 转 Kotlin 自动化工具的实现。...Kotlin 构造器实现分析 上面我们简单的过了一遍 Kotlin 对 Java 构造器的优化,但 Java 采用这样的设计,是因为它忠实的反映了 JVM 的构造器实现。...我们直接看一下 Kotlin 编译再反编译后的字节码: public RecordingBottomView(@NotNull Context context, @Nullable AttributeSet

    1.3K20

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

    将Java自动转换为Kotlin,JetBrains将IntelliJ集成了一个新功能,将Java转换为Kotlin,节省了大量的时间。而且它也节省了我们重新编写代码。...Kotlin的空安全性很好,现在摆脱NullPointerExceptions。这种类型的系统帮助我们避免空指针异常。...在Kotlin系统中,系统只拒绝编译尝试分配或返回null的代码考虑以下示例 不同之处 变量:Java中需要明确变量类型,Kotlin中普通变量用var,常量用val,val常量不能被修改。...可先赋值给变量再操作 空安全:Kotlin中需要明确说明该变量是否为null,用来必免空异常。编辑器会自动检测。如果需要为空,需要在变量后加?...小技巧 如果不知道Kotlin怎么写时,可以写一个Java的,然后用Idea的Java代码转Kotlin功能转换一下 Kotlin的传参写法:str: String,名字在前,类型在后 ... ----

    1.1K10

    Kotlin 是如何避免空指针问题的

    可空类型 默认声明的变量是不能为 null 的,如果要使变量能为 null, 需要添加 ?操作符。...= if ... else null 安全空访问 智能类型转换是一个相当好的特点,可以安全访问可空变量。例如: var name: String? = "harry" if (name !...name 非空断言 有时候,要将可空的变量转成非空的, 常见于Java, 我们知道变量是不可能为 null 的, 可以用非空断言 !!。例如: val nullableString: String?...Kotlin采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如Bar?,而Bar类型的变量则不可为空。...于是,在Kotlin中,上述Java代码就变成了下面这样: public fun foo(bar : Bar) { /*…*/ } Kotlin非常简洁且富有表现力。这从上面的例子可见一斑。

    2.2K70
    领券