kotlin 学习

val 常量声明 

 

val MODE_STORE: Int? = 0

var 变量声明

 

var return: Int? = 0

?的含义:在kotlin中单独使用?表示可以为空

 

var result = str?.length

等同于java:

 

if(str == null){
    // 这里result为一个引用类型
    result = null;
} else{
    // 这里result为Int
    result = str.length;    
}

!!的含义:在kotlin中表示一定不能为空

 

business.product!!.id!!

?:的含义:在kotlin中表示三元操作符,既三目运算符

 

var str : String? = null
var result = str?.length ?: -1
var result : Int = if(str != null) str.length else -1

kotlin中泛型
kotlin中添加了协变注解修饰符:in和out(in对应to,out对应from)
in T:来确保Source的成员函数只能消费T类型,而不能返回T类型,也称in修饰的参数为“消费者”
out R:来确保Source的成员函数只能返回R类型,而不能消费R类型,也称out修饰的参数为“生产者”
out类似于java中的extends,用来界定类型上限,in类似于java中的super,用来界定类型下限。
//定义类
class Data<T>(var t : T)
//定义接口
interface Data<T>
//定义函数
fun <T> logic(t : T){}


//使用通配符解决数据调用问题
fun copy(from: Array<out A>, to: Array<in A>) {
    for (i in from.indices)
        to[i] = from[i]
}




JAVA中泛型
from是生产者,to是消费者。
extends关键字限定类型上限,super关键字限定类型下限。
//定义类
class Data<T>{}
//定义接口
interface Data<T>{}
//定义方法
public <T> void data(T t){}
//使用通配符
//用?表示任何类型,结合extends和super关键字可以限定类型的上限和下限
class Data<T>{} 
// extends关键字限定类型上限,表示类型必须是String或String的子类
public void dataUpper(Data<? extends String> d){}
// super关键字限定类型下限,表示类型必须是String或String的父类
public void dataLower(Data<? super String> d){}


//使用通配符解决数据调用问题
fun copy(from: Array<A>, to: Array<A>) {
    for (i in from.indices)
        to[i] = from[i]
}


let 语法糖
let{}块
数据为空值,就return,退出函数


使用object关键字声明一个类型时,声明的是一个单例模式的类型。object是lazy-init,即延时初始化的,只有第一次使用时,才会加载并实例化它。
java中常有“按值传递”和“按引用传递”的概念。
kotlin中,函数入参一律是val,即常量类型。只读,不能修改。


在java和kotlin语言中,虽然没有指针的概念,但是变量名其实就是一个指针(非基本类型)。在jvm中,变量名会被处理成指向某个内存地址的值。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值