我们通过Kotlin得到了什么?
2017-05-21 16:28
260 查看
我们通过Kotlin得到什么
不深入Kotlin语言(我们会在下一章再去学习),这里有一些Java中没有的有趣的特性:
易表现
通过Kotlin,可以更容易地避免模版代码因为大部分的典型情况都在语言中默认覆盖实现了。举个例子,在Java中,如果我们要典型的数据类,我们需要去编写(至少生成)这些代码:
使用Kotlin,我们只需要通过数据类:
这个数据类,它会自动生成所有属性和它们的访问器,以及一些有用的方法,比如,toString()
空安全
当我们使用Java开发的时候,我们的代码大多是防御性的。如果我们不想遇到NullPointerException,我们就需要在使用它之前不停地去判断它是否为null。Kotlin,如很多现代的语言,是空安全的,因为我们需要通过一个安全调用操作符(写做?)来明确地指定一个对象是否能为空。
我们可以像这样去写:
扩展方法
我们可以给任何类添加函数。它比那些我们项目中典型的工具类更加具有可读性。举个例子,我们可以给fragment增加一个显示toast的函数:
我们现在可以这么做:
函数式支持(Lambdas)
每次我们去声明一个点击所触发的事件,可以只需要定义我们需要做些什么,而不是不得不去实现一个内部类?我们确实可以这么做,这个(或者其它更多我们感兴趣的事件)我们需要感谢lambda:
这里只是挑选了很小一部分Kotlin可以简化我们代码的事情。现在你已经知道这门语言的一些有趣的特性了,你可以考虑它是否是适合你的。如果你选择继续,我们将在以后开始我们的实践之旅。
不深入Kotlin语言(我们会在下一章再去学习),这里有一些Java中没有的有趣的特性:
易表现
通过Kotlin,可以更容易地避免模版代码因为大部分的典型情况都在语言中默认覆盖实现了。举个例子,在Java中,如果我们要典型的数据类,我们需要去编写(至少生成)这些代码:
public class Artist { private long id; private String name; private String url; private String mbid; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getMbid() { return mbid; } public void setMbid(String mbid) { this.mbid = mbid; } @Override public String toString() { return "Artist{" + "id=" + id + ", name='" + name + '\'' + ", url='" + url + '\'' + ", mbid='" + mbid + '\'' + '}'; } }
使用Kotlin,我们只需要通过数据类:
data class Artist( var id: Long, var name: String, var url: String, var mbid: String)
这个数据类,它会自动生成所有属性和它们的访问器,以及一些有用的方法,比如,toString()
空安全
当我们使用Java开发的时候,我们的代码大多是防御性的。如果我们不想遇到NullPointerException,我们就需要在使用它之前不停地去判断它是否为null。Kotlin,如很多现代的语言,是空安全的,因为我们需要通过一个安全调用操作符(写做?)来明确地指定一个对象是否能为空。
我们可以像这样去写:
// 这里不能通过编译. Artist 不能是null var notNullArtist: Artist = null // Artist 可以是 null var artist: Artist? = null // 无法编译, artist可能是null,我们需要进行处理 artist.print() // 只要在artist != null时才会打印 artist?.print() // 智能转换. 如果我们在之前进行了空检查,则不需要使用安全调用操作符调用 if (artist != null) { artist.print() } // 只有在确保artist不是null的情况下才能这么调用,否则它会抛出异常 artist!!.print() // 使用Elvis操作符来给定一个在是null的情况下的替代值 val name = artist?.name ?: "empty"
扩展方法
我们可以给任何类添加函数。它比那些我们项目中典型的工具类更加具有可读性。举个例子,我们可以给fragment增加一个显示toast的函数:
fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) { Toast.makeText(getActivity(), message, duration).show() }
我们现在可以这么做:
fragment.toast("Hello world!")
函数式支持(Lambdas)
每次我们去声明一个点击所触发的事件,可以只需要定义我们需要做些什么,而不是不得不去实现一个内部类?我们确实可以这么做,这个(或者其它更多我们感兴趣的事件)我们需要感谢lambda:
view.setOnClickListener { toast("Hello world!") }
这里只是挑选了很小一部分Kotlin可以简化我们代码的事情。现在你已经知道这门语言的一些有趣的特性了,你可以考虑它是否是适合你的。如果你选择继续,我们将在以后开始我们的实践之旅。
相关文章推荐
- 【大数据部落】通过数据挖掘我们能从股市数据得到什么
- EJB3,我们究竟得到了什么 (3)
- 评中日东海谈判-我们得到了什么?
- 通过Volley我们能学到什么?(3) — 缓存原理
- DNS服务器不能响应的四大解决办法 使用电脑操作系统上的windows疑难解答会得到这样的提示:DNS服务器未响应。一般通过电脑操作系统上的windows疑难解答检测出来的结果是。 我们在日常上网的时
- 什么是使用记录访问权限呢?这是在Android5.0(Api level 21)新添加的,通过该权限我们可以查看设备上其它应用使用情况的统计信息等。
- EJB3,我们究竟得到了什么 (1)
- 通过Volley我们能学到什么?(1) — 工作原理与设计模式
- highcharts图表易错篇:前端通过string.split()得到的array数组直接赋值给series内data前需要做什么
- 时光如梭,可我们又得到了什么
- 国人对高等教育的普遍误解——“我们能从大学得到什么”系列之一 推荐
- 我们能从SNS网站得到些什么 一位同学对原还内网的分析结论
- 通过Volley我们能学到什么?(2) — 刨析网络请求框架
- 通过Class.forName("xxx").newInstance()和通过new 得到对象有什么区别
- 失去,得到,我们得到了什么
- 大学,我们应该得到什么
- 大学课程能给我们带来什么?——“我们能从大学得到什么”系列之三 推荐
- 文本挖掘,我们想要得到什么
- 通过字节码扒一扒java编译器瞒着我们做了什么(3)
- 大学课程能给我们带来什么?——“我们能从大学得到什么”