使用kotlin改善java代码

本文主要举几个kotlin如何改善java代码的例子

字符串字面值及模板

  • 字符串字面值 @Test fun testStringLiterals(){ val a = """if(a > 1) { | return a |}""".trimMargin() println(a) val b = """Foo Bar""".trimIndent() println(b) } 有了字符串字面值,写sql啥的就不用那么费劲拼接字符串了
  • 字符串模板 @Test fun testStringTemplate() { val name = "hello kotlin" println("Hello, $name!"); val data = listOf(1,2,3) println("Hello, ${data[0]}!") } 这个字符串模板更是强大,相当于内置一个freemarker,而且都不用手工传递变量值

for循环中获取当前index

    @Test
    fun testForEachIndex(){
        val items = listOf("apple", "banana", "kiwifruit")
        for (index in items.indices) {
            println("item at $index is ${items[index]}")
        }
    }

在java里头for each循环要得到index,就得在外面声明下index,自己统计,太别扭了

data class

    //生成getter/setter,equals,hashcode,toString,copy等
    //setter是var变量才有
    data class Customer(val name: String, val email: String)

    @Test
    fun testDataClass(){
        val customer = Customer("admin","admin@admin.com")
        println(customer)
    }

java总是要声明getter/setter,好处是可以在IDE查找那些方法有调用getter/setter; lombok虽然可以自动生成getter/setter,@Data注解也可以生成equal/hashcode方法,但是lombok不方便在IDE查找那些方法有调用getter/setter;kotlin的data class帮你解决这些问题

Null Safety

    @Test
    fun testIfNotNull(){
        val files = File("Test").listFiles()
        println(files?.size)  //null
    }

    @Test
    fun testIfNotNullAndElse(){
        val files = File("Test").listFiles()
        println(files?.size ?: "empty")
    }

这个Null Safety太有用了,比起java的三元表达式更简洁一点,在表达式为true的时候就不用重复写要返回的内容,只要写else部分。

Null Safety在流式/链式调用的时候更有用

// 如果 `person` 或者 `person.department` 其中之一为空,都不会调用该函数:
person?.department?.head = managersPool.getManager()

小结

本文只是举了kotlin可以改善java代码的几个例子,kotlin太强大了,目标是要替代java。其中很多设计可以看到scala的影子,但是黑魔法也比较多,学习曲线稍微有点抖,不过如果不使用太高级的语法,也还OK。

doc

  • kotlin reference cn

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2018-03-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GopherCoder

专栏:003:正则表达式

25870
来自专栏恰童鞋骚年

你必须知道的指针基础-3.指针的移动及指针的危险

  指针每次加一就是指针向前移动指针类型对应的字节数。下面通过一个int指针来指向一个int数组,看看指针的加法运算到底是个什么鬼?

10620
来自专栏深度学习自然语言处理

【干货】python正则表达式应用笔记

正则表达式 (Regular Expression) 又称 RegEx, 是用来匹配字符的一种工具. 在一大串字符中寻找你需要的内容. 它常被用在很多方...

32880
来自专栏绿巨人专栏

学习Scala: 初学者应该了解的知识

31040
来自专栏轮子工厂

8. 一花一世界,while for 循环?

wo这周有点懒啊,这才第 2 篇,个人有点事情,本来预计可以更新……1 篇的,︿( ̄︶ ̄)︿

14520
来自专栏斑斓

引入Option优雅地保证健壮性

REA的Ken Scambler在其演讲《2 Year of Real World FP at REA》中,总结了选择函数式编程的三个原因:Modularity...

37050
来自专栏Bingo的深度学习杂货店

Python实现十大经典排序算法

话不多数,先上两张图: ? ? 名词解释: n:数据规模 k:“桶”的个数 In-place:占用常数内存,不占用额外内存 Out-place:占用额外内...

5.3K100
来自专栏Fundebug

代码面试需要知道的8种数据结构(附面试题及答案链接)

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

18870
来自专栏前端下午茶

JS中的柯里化

柯里化(Currying),又称部分求值(Partial Evaluation),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并...

97420
来自专栏aCloudDeveloper

一个交换程序的通用版本

Author:bakari   Date:2012.9.3       交换程序是每个开始学习编程的人必学习的一个初级算法。算法思想很简单,就是为两个交换的双方...

17960

扫码关注云+社区

领取腾讯云代金券