Kt学习05

总结

这次写前面,因为时不时自己也要看看,每次往下翻累死了 ,囧

1 泛型

泛型,感觉和java差别不大,就是说到了个约束泛型没怎么懂,需要特别去看看

2 枚举类

枚举类,这个也和java一样,枚举类的几个方法:
// println(Color.values())// 以数组的形式,返回枚举值
// println(Color.valueOf("RED"))// 转换指定 name 为枚举值,若未匹配成功,会抛出IllegalArgumentException
// println(color.name)//获取枚举名称
// println(color.ordinal)//获取枚举值在所有枚举数组中定义的顺序
// Kotlin 1.1 起,可以使用enumValues<T>()enumValueOf<T>() 函数以泛型的方式访问枚举类中的常量

3 对象表达式和对象声明

对象表达式object关键字,这个可以直接创建一个新的类但不用去声明一个新的类,牛逼,直接在代码里面冲;
对象表达式可以继承接口或者基类;
引用该对象,我们直接使用其名称即可;
可以将这个对象赋值给变量,但是这个对象不会变,也就是说是一个单例;

4伴生对象

类内部的对象声明可以用companion 关键字标记;
可以直接通过外部类访问对象内部元素;
写单例的时候很方便,用起来也方便;

class OutClass{
    companion object Single{
        fun instance():OutClass = OutClass()
    }
}
 var instance = OutClass.instance()

注意:一个类里面只能声明一个内部关联对象,即关键字 companion 只能使用一次;
//请伴生对象的成员看起来像其他语言的静态成员,但在运行时他们仍然是真实对象的实例成员。
// 对象表达式和对象声明之间的语义差异
// 对象表达式和对象声明之间有一个重要的语义差别:
// 对象表达式是在使用他们的地方立即执行的
// 对象声明是在第一次被访问到时延迟初始化的
// 伴生对象的初始化是在相应的类被加载(解析)时,与 Java 静态初始化器的语义相匹配

package com.learn
import android.provider.ContactsContract.Data
import android.support.v4.app.INotificationSideChannel
/**
 * 学习Kotlin第五天
 */
class Kt5 {
    // 定义泛型类型变量,可以完整地写明类型参数,如果编译器可以自动推定类型参数,也可以省略类型参数。
    //Kotlin 泛型函数的声明与 Java 相同,类型参数要放在函数名的前面
    fun <T> setUpBox(value: T): Box<T> {
        return Box(value)
    }

    //自 Kotlin 1.1 起,可以使用 enumValues<T>() 和 enumValueOf<T>() 函数以泛型的方式访问枚举类中的常量 :
    inline fun <reified T : Enum<T>> printAllValues() {
        println(enumValues<T>().joinToString {
            "${it.ordinal} : ${it.name}"
        })
    }
}

//Kotlin 泛型
//泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上。
//与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼

//定义一个泛型
class Box<T>(t: T) {
    var value = t
        get() = field
        set(value) {
            when (value) {
                is String -> println("String ")
                is Int -> println("Int")
                is Indian -> println("Indian")
                else -> println("Any")
            }
            field = value
        }

}


//泛型约束
//没咋看懂,这也太随意了

//Kotlin 枚举类
//枚举类最基本的用法是实现一个类型安全的枚举。
//枚举常量用逗号分隔,每个枚举常量都是一个对象
enum class Color {
    BLUE, RED, ORANGE, PINK
}

//枚举初始化
//每一个枚举都是枚举类的实例,它们可以被初始化
enum class Colors(var rgb: Int) {
    RED(0xFF0000),
    GREEN(0x00FF00),
    BLUE(0x0000FF)
}

//Kotlin 对象表达式和对象声明
//Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类
//对象表达式
//通过对象表达式实现一个匿名内部类的对象用于方法的参数中
fun testObjectExpression() {

}

//对象可以继承于某个基类,或者实现其他接口
open class A(a: Int) {
    public open val aa: Int = a
}

interface B


//对象声明
//Kotlin 使用 object 关键字来声明一个对象。
//Kotlin 中我们可以方便的通过对象声明来获得一个单例
object Date {
    fun print() {
        println("$data")
    }

    var data: Int = 1
}

//伴生对象
//类内部的对象声明可以用 companion 关键字标记,这样它就与外部类关联在一起,我们就可以直接通过外部类访问到对象的内部元素
class OutClass{
    companion object Single{
        fun instance():OutClass = OutClass()
    }
}


fun main(args: Array<String>) {
    //创建类的实例时我们需要指定类型参数
//    val box: Box<Int> = Box(1)
//    box.value = 2
//    val box2: Box<Indian> = Box(Indian("阿三", 22, 42.2))
//
//    var (age, name, weight) = box2.value
//    println(box.value)
//    println(box2.value)
//    println("$age,$name,$weight")
//
//    var box3 = Kt5().setUpBox(European("jack",21,55.5,"伯爵"))
//    println("${box3.value}")


//    //Kotlin 中的枚举类具有合成方法,允许遍历定义的枚举常量,并通过其名称获取枚举常数
//    var color: Color = Color.BLUE
//    println(Color.values())// 以数组的形式,返回枚举值
//    println(Color.valueOf("RED"))// 转换指定 name 为枚举值,若未匹配成功,会抛出IllegalArgumentException
//    println(color.name)//获取枚举名称
//    println(color.ordinal)//获取枚举值在所有枚举数组中定义的顺序
//
//    Kt5().printAllValues<Color>()
//    //自 Kotlin 1.1 起,可以使用 enumValues<T>() 和 enumValueOf<T>() 函数以泛型的方式访问枚举类中的常量
//    println(enumValues<Color>().joinToString { it.name })


    //对象可以继承于某个基类,或者实现其他接口
    //如果超类型有一个构造函数,则必须传递参数给它。多个超类型和接口可以用逗号分隔。
//    var c = object : A(1), B {
//        override val aa = 12
//    }
//    println(c.aa)
//    //通过对象表达式可以越过类的定义直接得到一个对象
//    var site = object {
//        var name: String = "张三"
//        var age: Int = 16
//    }
//    println("name = ${site.name} ||  age = ${site.age}")


    //引用该对象,我们直接使用其名称即可
    Date.print()
    //当然你也可以定义一个变量来获取这个对象,当时当你定义两个不同的变量来获取这个对象时,你会发现你并不能得到两个不同的变量。也就是说通过这种方式,我们获得一个单例
    var date1 = Date
    var date2 = Date
    date1.data = 2222
    println(date1.data == date2.data)

    //类内部的对象声明可以用 companion 关键字标记,这样它就与外部类关联在一起,我们就可以直接通过外部类访问到对象的内部元素
    var instance = OutClass.instance()
    //注意:一个类里面只能声明一个内部关联对象,即关键字 companion 只能使用一次。
    //请伴生对象的成员看起来像其他语言的静态成员,但在运行时他们仍然是真实对象的实例成员。

    //对象表达式和对象声明之间的语义差异
    //对象表达式和对象声明之间有一个重要的语义差别:
    //    对象表达式是在使用他们的地方立即执行的
    //    对象声明是在第一次被访问到时延迟初始化的
    //    伴生对象的初始化是在相应的类被加载(解析)时,与 Java 静态初始化器的语义相匹配

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容