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。

相关参考:https://www.kotlincn.net/docs/reference/

您可能感兴趣的文章:

  • kotlin和Java的相互调用示例详解
  • Kotlin传递可变长参数给Java可变参数实例代码
  • 详解分别用Kotlin和java写RecyclerView的示例
  • Android使用Kotlin和RxJava 2.×实现短信验证码倒计时效果
  • Kotlin与Java的主客观对比分析
  • Kotlin结合Rxjava+Retrofit实现极简网络请求的方法
  • Java8中Optional类型和Kotlin中可空类型的使用对比
  • Kotlin 基础教程之注解与java中的注解比较
  • 详解Kotlin中如何实现类似Java或C#中的静态方法
  • Kotlin 与 Java基本语法对比
(0)

相关推荐

  • Kotlin 基础教程之注解与java中的注解比较

    Kotlin 的注解完全兼容 Java 的注解. 声明注解 @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION) @Retention(AnnotationRetention.SOURCE) @MustBeDocumented annotation class Fancy 可以通过向注解类添加元注解(meta

  • kotlin和Java的相互调用示例详解

    前言 互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的.同时,在进行Java编程时也可以调用Kotlin中的API接口. 1.在kotlin中调用Java方法 Kotlin和Java是两种不同的语言,所以在互相调用的时候,会有一些特殊的语法.kotlin中对象属性默认就带有setter和getter方法,所以在kotlin中调用Java时直接变量名点属性就可获取到属性的setter和getter的一

  • Android使用Kotlin和RxJava 2.×实现短信验证码倒计时效果

    本文介绍了Android使用Kotlin和RxJava 2.×实现短信验证码倒计时效果,分享给大家,具体如下: 场景:注册账号页面时,我们点击按钮发送验证码,在等待验证码时,界面会有倒计时提示,这此期间按钮不可点击.当倒计时结束时,按钮恢复. 实现代码 val timer:TextView = findViewById(R.id.textView) //这里的 timer 就是你要控制显示倒计时效果的 TextView val mSubscription: Subscription? = nul

  • 详解Kotlin中如何实现类似Java或C#中的静态方法

    大家可以在网络上搜到不少这样的文章,官方推荐是包级函数,也有人说用伴生对象(companion class).这些都是不错的选择,但并不完善,我们在不同的情况下有更好的选择.我总结了几种方法,分别是:包级函数.伴生对象.扩展函数和对象声明.这需要大家根据不同的情况进行选择. 一.包级函数 Kotlin和Java及C#不同的是,可以在包里面直接声明函数.做法和类中是一样的,这里就不多说了,的确是一个非常好的选择.适用于函数不需要不包内部的类进行数据共享的方法. 二.伴生对象 从语义上来讲,伴生函数

  • Kotlin 与 Java基本语法对比

    Kotlin 与 Java基本语法对比 Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的社区不断增长. 每个人都在谈论它,并说它很酷. 但为什么这么特别? 我们准备了一系列文章,分享我们在Kotlin开发Android应用程序的经验. 我们将讨论Kotlin与Java在语法,可用性,UI性能和异步性方面的区别,以便您可以决定哪种语言最适合您. 让我们从一些基本的语法差异开始. 这是第一个: 1. 使用Kotlin,你可以用更少的代码做更多 Kotlin的一个主要优点是它的简洁.

  • Kotlin与Java的主客观对比分析

    Kotlin Kotlin是一门相对比较新的JVM语言,JetBrains自2011年以来一直在积极地开发. 多年来,该语言在Android社区受到的关注度越来越高,并在Google IO 2017大会之后成为Android开发领域最热门的话题.这次大会宣布,Android正式支持Kotlin. 遗憾的是,虽然已经有许多关于Kotlin的文章,但并没有多少客观信息,许多开发人员仍然在苦思冥想,迁移到Kotlin是否是一条正确的道路. 在本文的剩余部分,我将尝试提供一个在将Kotlin作为Java

  • Java8中Optional类型和Kotlin中可空类型的使用对比

    本文主要给大家介绍了关于Java8中Optional类型和Kotlin中可空类型使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型. package com.easy.kotlin; import java.util.Optional; import static java.lang.System.out; /** * Optional.ofNullable - 允许传递为 null 参数 *

  • Kotlin传递可变长参数给Java可变参数实例代码

    本文研究的主要是Kotlin传递可变长参数给Java可变参数的方法,具体实现代码如下. 定义Java可变参数方法 package com.tcl.john.studymvvm.utils; /** * 调用Java方法的工具类 * Created by ZhangJun on 2017/10/25. */ public class CallJavaUtils { public static int addNumbers(String name, int... args) { int result

  • 详解分别用Kotlin和java写RecyclerView的示例

    本文介绍了分别用Kotlin和java写RecyclerView的示例,分享给大家,具体如下: java:跟一般的写法一样,增加了按钮响应 MainActivity: public class MainActivity extends AppCompatActivity implements RecyclerAdapter.OnItemClickListener{ private RecyclerView mRecyclerView; private RecyclerView.LayoutMan

  • Kotlin结合Rxjava+Retrofit实现极简网络请求的方法

    前言 因为最近正在写的项目集成了两个网络请求框架(Volley and Retrofit)对比之下也是选择了Retrofit.既然选择那自然要让自己以后开发更加省力(就是懒).于是我在Retrofit中加入了Rxjava,这也是当下蛮流行的一个请求框架.然后又利用了Kotlin的一些新特性,使网络请求变得特别简单,代码量特别少. Kotlin镇楼 RxJava RxJava学习是一个曲折漫长的过程,但一旦掌握,妙用无穷. 通过这里了解更多:http://www.jb51.net/article/

随机推荐