Kotlin:学习笔记三

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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,522评论 9 118
  • 接口kotlin中的接口既可以定义抽象方法,也可以实现。和抽象类不同的是,接口无法保存状态,接口中定义的属性要么是...
    笔头阅读 2,361评论 0 0
  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 8,836评论 1 24
  • 类 类的声明 类的定义:类通过class关键字来声明,类声明由类名、类头(指定其类型参数、主 构造函数等)和由大括...
    风少侠阅读 2,726评论 0 0
  • 如飞的想象 不在秋天感伤 水再凉,也要让血 温暖心房 疲惫寡欢,会断了向往 不知飞向何方 尘埃蒙心,迷雾万丈 慢慢...
    文山鹿阅读 1,391评论 10 32

友情链接更多精彩内容