Kotlin关键字

2017-11-04  本文已影响0人  聞言
kotlin vs java

前言:

这个文章主要是归集一下kotlin中的关键字,当然也会慢慢的逐一介绍和解释每一个关键字的作用和在JAVA中对应功能。文章不一定能够一次把所有的关键字都归集到一起,但是后期会发现一个更新一次,争取能够在博主能力范围内尽可能最多的归集这些关键字。也希望大家在阅读文章的时候发现没有的在下方留言,博主会及时的对所留关键字进行学习和总结,希望大家多多指点。
以下关键字不管简单的难的都有,博主目的也是让自己对kotlin中的关键字全部做一个归集,过于简单的或者和JAVA中用法等一致的也会一笔带过。对于别人已经描述的很清楚的关键字,我会贴出链接,不在重新造轮子了。
关键字:
修饰类:

1. object

Object关键字
作为类它可以继承另一个类,实现接口,有成员属性和成员函数;
作为实例它可以声明为一个类型,不能有构造函数,引用时直接使用名称,多次访问返回同一结果。

2. companion

Kotlin单例与伴生对象

3. constructor

构造函数。具体点击进去看大神详解。

4. data

Data class 使用

5. sealed(密封类)

sealed class SealedClassName(){
      data class DataClassName(val name: String, var age: Int): SealedClassName(){}
      object class ObjectClassName(): SealedClassName{}
}
  1. 密封类本身是抽象的,不能实例化,可以有抽象成员。
  2. 密封类不允许有非私有构造函数(默认情况下,它们的构造函数是私有的)。
  3. 请注意,扩展类(间接继承器)的子类的类可以放置在任何位置,而不必在同一个文件中。
  4. 使用密封类的关键好处是在when表达式中使用它们时发挥作用。如果可以验证该语句涵盖所有情况,则不需要else在语句中添加子句。但是,仅当您使用when表达式(使用结果)而不是作为语句时,这才有效。
//不用在写else语句
fun isString(scn: SealedClassName) = when(str){
      is DataClassName -> "这是DataClassName对象"
      is ObjectClassName -> "这是ObjectClassName对象"
}

6. inner

内部类构建关键字,在kotlin中嵌套类不是内部类,内部类要用inner关键字修饰。

7. enum

定义枚举常量枚举类,官网介绍

8. reified

修饰属性:

1. const

这个关键字其实和val有着相似的功能,但是他修饰的属性才是正真意义上JAVA中static final修饰的常量,关键字只能用在object修饰的类内和companion object{}伴生对象内或者文件的顶层(也就是和类同意级别的,调用则是用文件名调用,具体后续简介)。

2. by

by关键字就是kotlin中特有的,一般用在委托属性(后续会单独介绍委托属性)的时候。

3. val

不可变属性,对应JAVA中被final修饰过的属性,标志着只能被一次赋值,但是该属性也不是完全不可变,可以被继承后改变,具体后续文章会介绍,这里只要知道一个概念。

4. var

可变属性

5. vararg(可变参数)

修饰方法:

通用关键字:

1. open

kotlin中所有文件默认是final的,也就是说默认kotlin中的类, 属性,方法都是不继承的。要想实现继承我们需要在对应的类, 属性, 方法前面加上open关键字,标识着这个类, 属性, 方法是可以被继承的,注意kotlin中interface(接口)修饰的类和abstract(抽象)修饰的类,属性,方法和override修饰的方法和属性默认是open。

2. final

kotlin中所有文件默认是final的, 该关键字用法和JAVA一样。

3. private

只在该类(以及它的成员)中可见, JAVA中用法一致。

4. internal (对应JAVA中的所有类,属性,方法的默认default

在本模块的所有可以访问到声明区域的均可以访问该类的所有internal成员。
模块在 Kotlin 中就是一系列的 Kotlin 文件编译在一起:
— an IntelliJ IDEA module; (一个module)
— a Maven or Gradle project;.(一个gradle里面的依赖jar包(maven))
— a set of files compiled with one invocation of the Ant task.(通过一次调用Ant任务编译的一组文件)

5. protected

一样但在子类中也可见, JAVA中用法一致。

6. public

任何地方可见, JAVA中用法一致,值得注意的是ktlin中所有的类,属性,方法默认都是public的。

上一篇下一篇

猜你喜欢

热点阅读