Kotlin的特性
- 它更加易表现:这是它最重要的优点之一。你可以编写少得多的代码。
- Kotlin是一种兼容Java的语言
- Kotlin比Java更安全,能够静态检测常见的陷阱。如:引用空指针
- Kotlin比Java更简洁,通过支持variable type inference,higher-order functions (closures),extension functions,mixins and first-class delegation等实现
- Kotlin可与Java语言无缝通信。这意味着我们可以在Kotlin代码中使用任何已有的Java库;同样的Kotlin代码还可以为Java代码所用
- Kotlin在代码中很少需要在代码中指定类型,因为编译器可以在绝大多数情况下推断出变量或是函数返回值的类型。这样就能获得两个好处:简洁与安全
Kotlin优势
- 全面支持Lambda表达式
- 数据类Data classes
- 函数字面量和内联函数Function literals & inline functions
- 函数扩展Extension functions
- 空安全Null safety
- 智能转换Smart casts
- 字符串模板String templates
- 主构造函数Primary constructors
- 类委托Class delegation
- 类型推判Type inference
- 单例Singletons
- 声明点变量Declaration-site variance
- 区间表达式Range expressions
上面说简洁简洁,到底简洁在哪里?这里先用一个例子开始,在Java开发过程中经常会写一些Bean类:
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;
}
}
使用kotlin
class Artist {
var id: Long = 0
var name: String? = null
var url: String? = null
var mbid: String? = null
}
这个数据类,它会自动生成所有属性和它们的访问器,以及一些有用的方法
空安全
当我们使用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"
函数式支持
每次我们去声明一个点击所触发的事件,可以只需要定义我们需要做些什么,而不 是不得不去实现一个内部类?我们确实可以这么做,这个(或者其它更多我们感兴 趣的事件)我们需要感谢lambda:
view.setOnClickListener { toast("Hello world!") }
网友评论