1.引言
今天晚上学习学习下,Kotlin数据类,泛型。
2正题
2.1数据类
用关键字data修饰的class,就是数据类。数据类必须要有主构造方法,而且至少有一个参数,而且主构造方法的参数必须用var或者val修饰。
数据类自动帮我们实现:
- equals()/hashCode()
- toString() 格式是 "PersonData(name=PersonData, age=20)"
- copy() 方法
使用示例:
data class Teacher constructor(var name:String,var age:Int){
}
fun main(args:Array<String>){
var t=Teacher("wxy",123);
var t1=t.copy(t.name,456);
System.out.println(t1.age)
System.out.println(t.age)
System.out.println(t.equals(t1))
}
数据类可以进行解构声明:例如
data class Parent constructor(var name:String,var age:String){
}
fun main(args:Array<String>){
var p=Parent("wxy","23");
val (name,age)=p;//按照这种方式,可以声明多个变量。并且给予变量赋值
println(name)// 打印:wxy
}
2.2泛型
kotlin泛型和java泛型基本上一致。
泛型类
class Teacher1<T>{
var t: T? = null
constructor(t:T){
this.t=t
}
}
泛型方法
class Teacher1<T>{
var t: T? = null
public fun <T>getData(): T? {//这里的泛型T 与泛型类上面的T 没得任何的关系,泛型方法的T换成K,也是可以 的,这里的T是根据输入的类型决定
return null
}
}
fun main(argsp:Array<String>){
var t=Teacher1<Object>();
var s:Student= t.getData<Student>()!!;
}
}
2.3高阶函数
如果一个函数的的参数是函数,或者返回值是函数,那么这个函数就是高阶函数.参考文章:http://blog.csdn.net/zxm317122667/article/details/78255481
知道了什么是高阶函数之后,我们可以使用一段伪代码来演示如何定义一个高阶函数,如下所示:
fun 高阶函数名(参数函数名:参数函数类型):高阶函数返回类型{
高阶函数体
...
}
函数文本语法
- 第一种写法
var sum = {x: Int,y: Int -> x + y}
- 第二种写法
val sum: (Int, Int) -> Int = {x, y -> x+y }
高阶函数例子:
fun getData(a: Int, b: Int, s: (a: Int, b: Int) -> Int): Int {
return s.invoke(a, b)
}
fun main(args: Array<String>) {
var sum = { x: Int, y: Int ->
if (x > y)
x
else
y
}
getData(10,20,sum);
}
网友评论