Kotlin 基本数据类型
Java | Kotlin
byte Byte
short Short
int Int
long Long
float Float
double Double
boolean Boolean
char Char
数据类型之间可以相互转化 比如
var index = 10 index.toLong,index.toDouble ...等
声明变量一般为 var 赋值变量 val 表示常量
可以显示声明类型:
var name : String = "Csdn"
也可以隐式声明:
var name = "Csdn"
val 修饰的一般为常量 不可改变 例如:
val name = "Android"
name = "Hello" 就会报错
修饰方法 一般为fun 例如:
fun getNumber(index : Int) : Int
getNumber(Index : Int) 代表传入一个Int的值 而函数中 : 后面的则为返回类型
无返回类型一般不用写,也可以写Unit
继承和实现:
Java 继承是extends 而Kotlin就是 :
比如: class A extnds B ,Kotlin则是class A : B ()
实现 Java是implements 而Kotlin 则是 直接实现的类的方法或者其他的属性
Kotlin特性之空安全
比如:private var name : String 这样写是报错的 因为没有初始化 为Null
如果可能需要为null或者避免检验 可以这样写: private var name : String? = null
Java避免空属性可以用注解 @NonNull @Nullable
kotlin中如果声明可为空 也就是 var name : String? = null 调用时会报错
如果强行调用 有两种方式:
安全调用value?.xxx 用?安全调用 为空则不调用
value!!.xxx强行调用,可能会报空指针
(变量后面有感叹号!代表非Kotlin声明的 比如是Java 等)
延迟初始化之 lateinit
lateinit 修饰的不能有初始值
比如 val lateinit name : String
类型判断
如果不确定数据类型 java中则是 instanceof 而Kotlin中则是 is
强制类型转换:
java中则是 A a = (A) value ,kotlin则是 as
获取class
java获取class 比如Main.class, value.getClass
kotlin获取为 Main::class ,获取Java的class 则是 Main::class.java
创建实例:
java中 通过new 创建 调用有参或者无参构造
kotlin中则是直接 类名() 参数 比如Intent, java:new Intent(xx,xx);kotlin Intent(xx,xx)
get/set
kotlin 声明属性时候默认会创建get/set 例如 :
var name : String? = null
get(){
return field
}set(){
field = name
}
构造器
constructor 函数 分为无参数:
constructor(){
}
有参数:
constructor(name : String){
}
@JvmField
如果成员变量中使用@JvmField则生成一个public的成员变量 不会生成get set
类的继承
java 所有的类 默认继承Object
Kotlin 默认 Any (更精简)
java void 对应kotlin Unit
构造器相互调用
单参数调用多参数 使用this(参数1,参数2...)
constructor(context : Context) this(context,null)
数组:
java中通过 []声明一维和二维 比如 int [] xx
kotlin则是 通过 arrayOf 比如 val numberList = arrayOf(1,2,3) 这种写法会自动装箱,造成不必要的内存开支,基本数据类型 比如int 可以使用intArrayOf 比如 val intArr : IntArray = intArrayOf(1,2)
intArrayOf FloatArrayOf 等
数组长度表示:在Java中 数组[ ] 长度表示为length 而Kotlin 则是 size
静态函数
java使用 static
kotlin : 1 定义在函数 比如 fun getMax() 通过导入包调用函数 称为顶级函数 类似于Java XXX.getMax()
object
kotlin 可以通过object 声明一个类,这个类中的变量和函数会变成全局的
并不是静态函数,而是自动创建这个类的单例对象,然后通过单例对象访问这个类
如 object V {} 这里面声明的函数是静态的 可以V.xxx调用,如果在Java中调用v的函数
则需要V.INSTANCE.getXXX()
companion object 静态变量修饰
类中的单利对象 比如 class Rock : A {
companion object{
private lateinit var index : Value?
fun getValue() : Value{
return value
}
}
fun setValue (value : Value){
value = this;
}
}
可以在object声明的函数方法中加入@JvmStatic 声明为静态函数
@file
例如在类的开头:@file:JvmName("xxx") 作用对象为文件
$
简化字符串模板可以省略拼接字符串+ 比如 var name : String = "Key$name"
object : params 等同于创建一个内部类
in
在xx 区间
在Java中表示 if (number > 200 && number < 600)
kotlin if (number in 200..600) 区间范围
when
类似于java的swith 同时支持表达式 比如 if xx else if xx else if xx
可以用when (code ) in 200 -> { } in 300 ->{} else ->{}
接口
也是用interface 定义
抽象
也是用abstract定义,构造器调用父类使用 : super(xxx)
枚举
使用 enum class 定义 (继承Annotation)
使用enum进行定义enum class Type{ A {} abstract fun type()}
fun
用于修饰方法
编译期常量 const
在 companion object{
const val NAME = "name"
}
引用外部对象属性
java 通常是类名.this.变量名
kotlin this@外部类类名.成员以及变量
创建集合
java new ArrayList
kotlin : ArrayList 也可以用 arrayListOf创建 或者 MutableList
listOf / List 不支持修改 MutableList支持修改 -----Map HashMap/MutableMap同理
遍历:
foreach
java : for ()
kotlin in for (value : Value in list)
静态内部类
internal 可进行修饰符,当前模块可见
inner 修饰内部类 但是不能存在compaion object 此对象
kotlin 在普通类和方法中默认是final 修饰的 否则需要用abstract / open /override