kotlin的符号

$可以理解为占位符后面跟的是变量名字 组合起来 就是$变量名    得到的是变量的值

println("itemB:$itemB")

? 表示这个对象可能为空

var  name:String?= "haha"

?:如果非空,我使用它。否则用某个非空值赋值

var l:Int= if(b!=null) b.lenth else -1

也可以写成这样var l= b?.length ?:-1

!!  被这样修饰的变量可能会报空指针 ,应该避免使用!!

private var mPhotoUrl:String?=null
fun uploadClicked(){
    mPhotoUrl?.let{uploadPhoto(it)}
}
ifNotNull(name,address){
    name,address->upload(name,address)
}
fun getName():String{
    return name?:"android coder"
}
upload(requireNotNull(intent.getStringExtra("address"),{"'address'参数为空!"})

这样可以避免使用

==表示值知否相等  === 表示值和引用都相等

..区间操作符

倒叙

for (i in 4 downTo 1) print(i) // 输出“4321”

_下划线 在没用用到的 参数里直接用下划线表示

fun main(args: Array<String>) {

val aa = mapOf(1 to "a",2 to "B")

aa.forEach { _, value -> println("value:$value")

}

step  表示步长

for (i in 1..4 step 2) print(i) // 输出“13”

解构声明

所谓的解构声明就是将一个对象解构(destructure)为多个变量,也就是意味着一个解构声明会一次性创建多个变量.简单的来说,一个解构声明有两个动作:

  • 声明了多个变量
  • 将对象的属性值赋值给相应的变量

var person: Person = Person("Jone", 20)

var (name, age) = person

println("name: $name, age: $age")// 打印:name: Jone, age: 20

数据类

在开发过程中,经常会创建一些数据里,其没有任何逻辑功能,仅仅来用来保存数据。在Kolin中,将这些类统一称为数据类,用关键字data标记。

data class User(val name: String, val age: Int)

编译器会根据主构造器中声明的全部属性, 自动推断产生以下成员函数:

  • equals()/hashCode()函数对,
  • toString() 函数, 输出格式为 “User(name=John, age=42)” ,
  • componentN() 函数群, 这些函数与类的属性对应, 函数名中的数字 1 到 N, 与属性的声明顺序一致,
  • copy() 函数

数据类的声明条件

  • 主构造器至少要有一个参数;
  • 主构造器的所有参数必须标记为 val 或 var ;
  • 数据类不能是抽象类、open 类、封闭(sealed)类、或内部(inner)类;
  • 数据类不能继承自任何其他类(但可以实现接口);

如果数据类有无参构造函数,需将主构造函数中,将成员属性初始化。

data class User(val name: String = "", val age: Int = 0)

::

1.得到类的Class对象

MainActivity::class.java

2.引用方法

var setBook = setOf<String>("hello", "hi", "你好")

setBook.forEach(::print)

@

1.限定this 的类型

2.作为标签 可以跳出双循环

3.命名函数自定义标签

:  放在类名后面 表继承 类或者实现接口

猜你喜欢

转载自blog.csdn.net/xiexiaotian11/article/details/81325411