安卓 java kotlin_kotlin与Java在Android开发中的简单对比

自从谷歌宣布,kotlin为Android官方的开发语言,它确实火了,因为他有强大的背景,更因为它的安全,简洁

大部分的人会说,我的项目是java,换成kotlin那成本太大了.其实kotlin的开发者早就想到这一点,kotlin官网强调:与java100%的交互.

这让你想到什么?没错,这意味着你不用用kotlin重构整个项目,可以立刻马上现在就kotlin写Android了.接下来我们来看看kotlin...

//Student,Teacher的实体类声明

data class Student(val name: String, val age: Int, val sex: String)

data class Teacher(val name: String, val age: Int, val sex: String)

没错,你再也不用写枯燥无味的get/set方法了,我们在看一段RxJava代码

//java写法,

Observable.just("1")

.map(new Function() {

@Override

public Integer apply(String s) throws Exception {

return Integer.parseInt(s) + 1; //将"1"转成Integer,并加1

}

})

.subscribe(new Consumer() {

@Override

public void accept(Integer integer) throws Exception {

System.out.println(integer); //打印2

}

});

//kotlin写法

Observable.just("1")

.map { it.toInt() + 1 } //String转Int,并+1

.subscribe { println(it) } //打印结果:2

从上面可以看出kotlin支持lambda表达式,而java是java8才开始支持,Android是不支持java8的.

细心的同学可能已经发现了,上面kotlin将String转成Int,只需要"1".toInt,写起来明显更符合面向对象的逻辑,不像java写起来有点繁琐.那么.toInt()的背后是什么呢?

//点进kotlin的源码一看,这货其实还是调用java的,并用kotlin的内联函数,保证不会因为函数入栈,出栈而带来性能损失,额...说得有点多

public inline fun String.toInt(): Int = java.lang.Integer.parseInt(this)

类型自动推导

//你可以不用生声明类型

private val age = 1 //用val声明一个不可变的字段(常量)

private var name = "lin" //用var声明一个变量

事实上,值不可变的字段,你应该用val声明.在java中,你应该用final关键字修饰.这样你维护代码的时候,一眼看到这个字段就知道它不可能在其他地方被赋值了,如果你不是这样做,修bug,维护这个字段的时候你得小心翼翼.这就是val声明的好处

java的switch 与 kotlin的when

//java代码

switch (age) {

case 1:

System.out.println("刚出生?");

break;

case 2:

case 3:

System.out.println("长大了");

break;

default:

System.out.println("翅膀硬了...");

}

//kotlin代码

when (age) {

1 -> println("刚出生?")

2, 3 -> println("长大了")

else -> print("翅膀硬了...")

}

你还记得你上一次在java中少写了一个break,而导致的bug吗? 当然kotlin的when还有更强大的操作.

集合操作符

//kotlin写法

//声明一个Student集合

val list = listOf(Student("lin", 1, "男"),

Student("zhang", 2, "女"),

Student("san", 3, "妖怪"),

Student("四", 4, "未知"))

//过滤出所有年龄大于2的学生

val filterStudents = list.filter { age > 2 }

//判断是否有一个名字叫"lin"的学生,如果有返回true,反之false

val hasStudentLin = list.any { it.name == "lin" }

//计算出男生的个数

val count = list.count { it.sex == "男" }

//java写法

你可能会这样写

private boolean hasStudentLin(ArrayList students) {

for (int i = 0; i < students.size(); i++) {

Student student = students.get(i);

if (student.getName().equals("lin")) {

return true;

}

}

return false;

}

//你还可能这样写

boolean hasStudentLin;

for (int i = 0; i < students.size(); i++) {

Student student = students.get(i);

if (student.getName().equals("lin")) {

hasStudentLin = true;

break; //是不是有可能你一不小心把break漏掉了,导致多循环n次

}

}

kotlin用简单的操作符any,filter ,count就清楚了表达了你想要的逻辑,代码的可读性大大提高,健壮性在某种程度上来说,也算提高了,比如上面student.getName()为null的时候(其实你应该用"lin"来调equals),java的写法就挂掉了,而kotlin则不会。事实上,kotlin还有很多操作符,他们都很实用。

以上的对比只是冰山一角,还有很多没提及,比如kotlin最重要的空安全...后面再慢慢补充...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值