Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKotlinor从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKo

从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKotlinor从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKo

作者头像
一个会写诗的程序员
发布于 2018-08-17 06:51:54
发布于 2018-08-17 06:51:54
46600
代码可运行
举报
运行总次数:0
代码可运行

从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKotlinor

非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~

Kotlin与Java对比

在前面的内容里,我们已经看到了JavaKotlin的互操作的基本方式。为了更好的认识Java与Kotlin这两门语言,我们在这里给出一些基本功能,同时使用Java与Kotlin来实现的代码实例。通过横向对比,从中我们可以看出它们的异同。

(此处可整理成表格形式)

打印日志

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
System.out.print("Java");
System.out.println("Java");
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("Kotlin")
println("Kotlin")

其实,Kotlin中的println函数是一个内联函数,它其实就是通过封装java.lang.System类的System.out.println来实现的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@kotlin.internal.InlineOnly
public inline fun print(message: Any?) {
    System.out.print(message)
}

常量与变量

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String name = "KotlinVSJava";
final String name = "KotlinVSJava";
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var name = "KotlinVSJava"
val name = "KotlinVSJava"

null声明

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String otherName;
otherName = null;
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var otherName : String?
otherName = null

空判断

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (text != null) {
    int length = text.length();
}
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
text?.let {
    val length = text.length
}
// 或者
val length = text?.length

在Kotlin中,我们只使用一个问号安全调用符号就省去了Java中烦人的if - null 判断。

字符串拼接

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String firstName = "Jack";
String lastName = "Chen";
String message = "My name is: " + firstName + " " + lastName;
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val firstName = "Jack"
val lastName = "Chen"
val message = "My name is: $firstName $lastName"

Kotlin中使用$${}(花括号里面是表达式的时候)占位符来实现字符串的拼接,这个比在Java中每次使用加号来拼接要方便许多。

换行

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String text = "First Line\n" +
              "Second Line\n" +
              "Third Line";
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val text = """
        |First Line
        |Second Line
        |Third Line
        """.trimMargin()

三元表达式

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String text = x > 5 ? "x > 5" : "x <= 5";
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val text = if (x > 5)
              "x > 5"
           else "x <= 5"

操作符

  • java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final int andResult  = a & b;
final int orResult   = a | b;
final int xorResult  = a ^ b;
final int rightShift = a >> 2;
final int leftShift  = a << 2;
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val andResult  = a and b
val orResult   = a or b
val xorResult  = a xor b
val rightShift = a shr 2
val leftShift  = a shl 2

类型判断和转换(显式)

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (object instanceof Car) {
}
Car car = (Car) object;
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (object is Car) {
}
var car = object as Car

类型判断和转换 (隐式)

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (object instanceof Car) {
   Car car = (Car) object;
}
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (object is Car) {
   var car = object // Kotlin智能转换
}

Kotlin的类型系统具备一定的类型推断能力,这样也省去了不少在Java中类型转换的样板式代码。

Range区间

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (score >= 0 && score <= 300) { }
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (score in 0..300) { }

更灵活的case语句

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public String getGrade(int score) {
        String grade;
        switch (score) {
            case 10:
            case 9:
                grade = "A";
                break;
            case 8:
            case 7:
            case 6:
                grade = "B";
                break;
            case 5:
            case 4:
                grade = "C";
                break;
            case 3:
            case 2:
            case 1:
                grade = "D";
                break;
            default:
                grade = "E";
        }
        return grade;
    }
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fun getGrade(score: Int): String {
    var grade = when (score) {
        9, 10 -> "A"
        in 6..8 -> "B"
        4, 5 -> "C"
        in 1..3 -> "D"
        else -> "E"
    }
    return grade
}

for循环

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (int i = 1; i <= 10 ; i++) { }

for (int i = 1; i < 10 ; i++) { }

for (int i = 10; i >= 0 ; i--) { }

for (int i = 1; i <= 10 ; i+=2) { }

for (int i = 10; i >= 0 ; i-=2) { }

for (String item : collection) { }

for (Map.Entry<String, String> entry: map.entrySet()) { }
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (i in 1..10) { }

for (i in 1 until 10) { }

for (i in 10 downTo 0) { }

for (i in 1..10 step 2) { }

for (i in 10 downTo 1 step 2) { }

for (item in collection) { }

for ((key, value) in map) { }

更方便的集合操作

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);
final Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Jack");
map.put(2, "Ali");
map.put(3, "Mindorks");
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val listOfNumber = listOf(1, 2, 3, 4)
val map = mapOf(1 to "Jack", 2 to "Ali", 3 to "Mindorks")

遍历

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Java 7 
for (Car car : cars) {
  System.out.println(car.speed);
}

// Java 8+
cars.forEach(car -> System.out.println(car.speed));

// Java 7 
for (Car car : cars) {
  if (car.speed > 100) {
    System.out.println(car.speed);
  }
}

// Java 8+
cars.stream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cars.forEach {
    println(it.speed)
}

cars.filter { it.speed > 100 }
      .forEach { println(it.speed)}

方法(函数)定义

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void doSomething() {
   // 实现
}

void doSomething(int... numbers) {
   // 实现
}
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fun doSomething() {
   // 实现
}

fun doSomething(vararg numbers: Int) {
   // 实现
}

带返回值的方法(函数)

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int getScore() {
   // logic here
   return score;
}
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fun getScore(): Int {
   // logic here
   return score
}

// 单表达式函数
fun getScore(): Int = score

另外,Kotlin中的函数是可以直接传入函数参数,同时可以返回一个函数类型的。

constructor 构造器

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Utils {

    private Utils() { 
      // 外部无法来调用实例化
    }
    
    public static int getScore(int value) {
        return 2 * value;
    }
    
}
  • Kotlin
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Utils private constructor() {

    companion object {
    
        fun getScore(value: Int): Int {
            return 2 * value
        }
        
    }
}

// 或者直接声明一个object对象
object Utils {

    fun getScore(value: Int): Int {
        return 2 * value
    }

}

JavaBean与Kotlin数据类

这段Kotlin中的数据类的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data class Developer(val name: String, val age: Int)

对应下面这段Java实体类的代码:

  • Java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public final class Developer {
   @NotNull
   private final String name;
   private final int age;

   @NotNull
   public final String getName() {
      return this.name;
   }

   public final int getAge() {
      return this.age;
   }

   public Developer(@NotNull String name, int age) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      super();
      this.name = name;
      this.age = age;
   }

   @NotNull
   public final String component1() {
      return this.name;
   }

   public final int component2() {
      return this.age;
   }

   @NotNull
   public final Developer copy(@NotNull String name, int age) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      return new Developer(name, age);
   }

   // $FF: synthetic method
   // $FF: bridge method
   @NotNull
   public static Developer copy$default(Developer var0, String var1, int var2, int var3, Object var4) {
      if((var3 & 1) != 0) {
         var1 = var0.name;
      }

      if((var3 & 2) != 0) {
         var2 = var0.age;
      }

      return var0.copy(var1, var2);
   }

   public String toString() {
      return "Developer(name=" + this.name + ", age=" + this.age + ")";
   }

   public int hashCode() {
      return (this.name != null?this.name.hashCode():0) * 31 + this.age;
   }

   public boolean equals(Object var1) {
      if(this != var1) {
         if(var1 instanceof Developer) {
            Developer var2 = (Developer)var1;
            if(Intrinsics.areEqual(this.name, var2.name) && this.age == var2.age) {
               return true;
            }
         }

         return false;
      } else {
         return true;
      }
   }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.09.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
最强总结 | Java-Kotlin双译手册,收藏必备
这篇文章梳理了我们平时开发中,最常用的Java代码对应的Kotlin实现,初学者可以当做实践手册,查找和阅读都非常方便,一眼就能看出来。 打印日志 Java System.out.print("Amit Shekhar"); System.out.println("Amit Shekhar"); Kotlin print("Amit Shekhar") println("Amit Shekhar") ---- 常量与变量 Java String name = "Amit Shekhar"; final St
吴延宝
2020/12/14
4160
kotlin与java的区别[通俗易懂]
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。 Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。 JetBrains,作为目前广受欢迎的Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。Kotlin已正式成为Android官方开发语言。
全栈程序员站长
2022/09/08
1.2K0
《Kotin 极简教程》第10章 Kotlin与Java互操作
在前面的章节中,我们已经学习了Kotlin的基础语法、类型系统、泛型与集合类、面向对象与函数式编程等主题,在上一章中我们还看到了Kotlin提供的轻量级并发编程模型:协程的相关内容。
一个会写诗的程序员
2018/08/17
2K0
【Kotlin】常用的 Kotlin 类 ① ( 嵌套类 | 数据类 | 数据类 copy 函数 | 数据类解构声明 operator fun component1 | 数据类运算符重载 )
嵌套类 指的是 在 类 A 中 定义 类 B , 一般是 类 B 对 类 A 有一定的作用 , 将 类 B 嵌套进 类 A 中 ; 格式如下 :
韩曙亮
2023/03/30
1K0
【Kotlin】常用的 Kotlin 类 ① ( 嵌套类 | 数据类 | 数据类 copy 函数 | 数据类解构声明 operator fun component1 | 数据类运算符重载 )
From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
Kotlin 出自于捷克一家软件研发公司 JetBrains ,这家公司开发出很多优秀的 IDE,如 IntelliJ IDEA、DataGrip 等都是它的杰作,包括 Google 官方的 Android IDE -- Android Studio ,也是 IntelliJ IDEA 的插件版。
Seachal
2023/05/20
1.3K0
From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
Kotlin 学习笔记(二)
在上篇笔记中,我们对 Kotlin 的基本类型、关键字、类与对象,以及与 Java 之间互调的内容有了一些认识,这篇笔记来看看 Kotlin 中几种特殊的类,以及集合相关的常用操作。
修之竹
2022/08/19
6430
Kotlin 学习笔记(二)
《Kotin 极简教程》第7章 面向对象编程(OOP)(2)《Kotlin极简教程》正式上架:
在上面的代码中,我们通过向注解类添加元注解(meta-annotation)的方法来指定其他属性:
一个会写诗的程序员
2018/08/17
1.6K0
《Kotlin 程序设计》第九章 Kotlin与Java混合调用
虽然 Kotlin 的开发很方便,但当你与他人协作时,总会碰到 Java 与 Kotlin 代码共存的代码项目。本章就教你如何优雅的实现 Kotlin 与 Java 混合编程。
一个会写诗的程序员
2018/08/17
1.6K0
第4章 类与面向对象编程第4章 类与面向对象编程
在前面的章节中,我们学习了Kotlin的语言基础知识、类型系统等相关的知识。在本章节以及下一章中,我们将一起来学习Kotlin对面向对象编程以及函数式编程的支持。
一个会写诗的程序员
2018/08/17
1.8K0
第4章 类与面向对象编程第4章 类与面向对象编程
Kotlin 机制你都了解吗?
kotlin 是静态类型的编程语言,运行于 jvm 之上。如果在编译时知道变量的类型,则语言是静态类型的,在运行时知道变量类型,则语言是动态类型。
网罗开发
2021/04/07
8220
Kotlin 机制你都了解吗?
【Kotlin】Kotlin 与 Java 互操作 ② ( @JvmField 注解字段给 Java | @JvmOverloads 注解修饰函数 | @JvmStatic 注解声明静态成员 )
在 Java 中是 不能直接访问 Kotlin 中的字段 的 , 必须 调用相应的 Getter 和 Setter 方法 , 才能进行访问 ;
韩曙亮
2023/03/30
1.1K0
【Kotlin】Kotlin 与 Java 互操作 ② ( @JvmField 注解字段给 Java | @JvmOverloads 注解修饰函数 | @JvmStatic 注解声明静态成员 )
【Kotlin】类的初始化 ③ ( init 初始化块 | 初始化顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化块代码 -> 次构造函数代码 )
在 Kotlin 类中 , 可以定义 init 初始化块 , 在其中可以为 变量赋值 , 执行一些检查相关的代码 , 该 init 初始化块在 创建类实例对象 时执行 ;
韩曙亮
2023/03/30
2.4K0
Kotlin中 四个提升逼格的关键字你都会了吗?
let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。
Android技术干货分享
2019/07/03
6320
Kotlin中 四个提升逼格的关键字你都会了吗?
浅谈Kotlin中的函数
Kotlin,已经被Android官方宣布 kotlin first 的存在,去翻 Android 官方文档的时候,发现提供的示例代码已经变成了 Kotlin。Kotlin的务实作风,提供了很多特性帮助开发者减少冗余代码的编写,可以提高效率,也能减少异常。
2020labs小助手
2019/11/04
2.6K0
Kotlin for Java Developers 学习笔记
Kotlin 被编译为 Java 字节码,所以从 Java 代码的层面看,这两者是一样的,都有一个 Constructor 和两个 Getter
凝神长老
2020/12/14
1.8K0
Kotlin for Java Developers 学习笔记
Kotlin的委托属性和区间
委托属性 委托属性 是一种通过委托实现拥有 getter 和可选 setter 的 属性,并允许实现可复用的自定义属性。例如: class Example { var p: String by Delegate() } 委托对象必须实现一个拥有 getValue() 方法的操作符,以及 setValue() 方法来实现读/写属性。些方法将会接受包含对象实例以及属性元数据作为额外参数。当一个类声明委托属性时,编译器生成的代码会和如下 Java 代码相似。 public final class Exam
xiangzhihong
2018/02/06
1.4K0
Better Kotlin
转眼间使用 Kotlin 已经有两个月了,时间不长,我也算搭上了 Google 宣布 Kotlin 作为官方支持语言的一波末班车。可能大家早已从纯 Java 开发 Android 转为了混合使用开发甚至是 Kotlin 开发,那你转向 Kotlin 的初衷又是什么呢?
贺biubiu
2019/04/24
1.3K0
Kotlin:你必须要知道的 inline-noinline-crossinline
inline: 声明在编译时,将函数的代码拷贝到调用的地方(内联) noinline:声明 inline 函数的形参中,不希望内联的 lambda crossinline:表明 inline 函数的形参中的 lambda 不能有 return
Android技术干货分享
2019/05/29
1.1K0
Kotlin与Java的异同(一)
Kotlin是一种针对Java 平台的新编程语言。Kotlin简洁、安全、务实,并且专注于与Java代码的互操作性。它几乎可以用在现在Java使用的任何地方:服务端开发、Android应用等等。Kotlin 可以很好地和所有现存的Java库和框架一起工作,而且性能和Java旗鼓相当。
全栈程序员站长
2022/09/08
1.9K0
Kotlin —— 这次入门就不用放弃了
声明:本文是FEELS_CHAOTIC原创,已获其授权发布,未经原作者允许请勿转载
用户2802329
2018/08/07
1.7K0
Kotlin —— 这次入门就不用放弃了
推荐阅读
相关推荐
最强总结 | Java-Kotlin双译手册,收藏必备
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验