记录一下

main.kt

import utils.Person1
import utils.serialize
import java.util.*

fun main(args: Array<String>){
    println("hello,world")

    //元组 Tuple
    val 课程 = Triple(3,"学会","Kotlin")
    val 费用 = Pair("学费",0)
    print("${课程.first}${课程.second}${课程.third}")
    println(",${费用.first}${费用.second}元!")

    //区间
    val 一到一百 = 1..100
    println("正序一到一百:")
    for(j in 一到一百)
        print(" ${j}")
    println()

    //downTo()创建倒序排列的区间
    println("倒序10到0:")
    val 倒计时 = 10.downTo(0)
    for (i in 倒计时)
        print("${i} ")

    //使用step()生成新区间
    println("\n 一到一百奇数:")
    val 一到一百奇数 = 一到一百.step(2)
    for (i in 一到一百奇数)
        print("${i} ")

    //使用reversed()翻转区间
    println("\n 翻转区间:")
    for (i in 一到一百奇数.reversed())
        print("${i} ")
    println()
    //字符串
    val s = " "
    println("s的长度是${s.isNotEmpty()}")

    //collection (array set map)
    //Array 数组-有序可重复 有索引
    //定义:Array<类型>/arrayOf(items..)
    var array = arrayOf("嘉定北","徐家汇","南翔","桃浦新村","徐家汇","上海西站","罗山路","迪士尼","嘉定新城","徐家汇","桃浦新村")

    //数组长度:count()/size
    println("array数组的长度是" + array.count() +"/${array.size}")

    //获取前五个元素(用方法只能获取前五个)
    println("第一个元素${array.first()}/${array.component1()}")
    println("第二个元素${array.component2()} ..其他同理 component3.4.5 但是只到五")
    println("最后一个元素${array.last()}")

    //检查是否包含某个元素 contains/in
    println("检查嘉定北是否在数组中,结果是嘉定北${if("嘉定北" in array)"" else "不在"}数组中")

    //查找元素 返回首次查找到的,find
    println("查找含有‘迪’字的第一个元素,结果是${array.find { it.contains("") }}")
    println("同理,查找最后一个用findlast,查找含有‘徐’的最后一个元素,结果是${array.findLast { it.contains("") }}")

    //把数组输出为字符串,默认逗号分隔 joinToString()
    println("将数组array输出为字符串:${array.joinToString()}")
    println("将数组输出为字符串花括号版:${array.joinToString { it + "" }}")
    println("圆括号加强版:${array.joinToString("-","地铁线路","",4)}")

    var mutamap = mutableMapOf<String,Any>(Pair("姓名", listOf(mapOf("1" to "张三", "2" to "李四"))), Pair("年龄",20), Pair("性别","男"))
    println(mutamap)
    var lists = listOf<String>("鸡蛋","大米","冰激凌")
    println(lists[0])
    for((i,e) in lists.withIndex())
        println("$i $e")

    var map =TreeMap<String,Any>()
    map["好"] = "good"
    map["学习"] = "study"
    println(map)

    data class County(val name: String, val peopleCount: Int)
    // 市
    data class City(val name: String, val counties: List<County>)
    // 省
    data class Province(val name: String, val size: Int, val cities: List<City>?)

    val c1 = County("湘潭县", 20_000)
    val c2 = County("株洲县", 30_000)
    val c4 = County("攸县", 40_000)

    val ci1 = City("湘潭市", listOf(c1))
    val ci2 = City("株洲市", listOf(c2, c4))

    val p1 = Province("湖南省", 780, listOf(ci1, ci2))
    println(serialize(p1))


    data class Person(val name: String, val age: Int, val likes: List<String>)

// 测试代码
    val p = Person("better", 30, listOf("Java", "Kotlin", "Python"))
    println(serialize(p))  // 没问题

}
util.kt //摘抄某位大神的手笔,忘了地址,如若侵犯权益,请联系本人删除 谢谢
package utils

import interFace.Apple
import java.lang.StringBuilder
import kotlin.reflect.KProperty1
import kotlin.reflect.full.memberProperties

// 对外全局方法
fun serialize(obj: Any) = buildString { serializeObj(obj) }

private inline fun StringBuilder.serializeObj(o: Any) {
    // ==== 1. 获取类的所有`KProperty`
    o.javaClass.kotlin.memberProperties.joinToStringBuilder(this, separator = ",", prefix = "{", postfix = "}") {
        // ==== 2.遍历 `KProperty` 集合,获取每个 `KProperty`,进行类型判断,并处理;
        serializeProperty(it, o)
    }
}

private inline fun StringBuilder.serializeProperty(property: KProperty1<Any, *>, receiver: Any) {
    // ====3. 每个`KProperty`都有他的名字与值,对应json的 key,value,value 处理时,需进行类型判断;
    val key = property.name
    // 处理key
    serializeString(key)
    append(": ")

    // 处理value
    val value = property.get(receiver)
    serializePropertyValue(value)
}

// 处理属性值
private fun StringBuilder.serializePropertyValue(value: Any?) {
    when (value) {
        null -> append("null")
        is String -> serializeString(value)
        is Boolean, is Number -> append(value.toString())
        is List<*> -> serializeList(value)
        else -> serializeObj(value)
    }
}

/**
 * 处理list
 */
private fun StringBuilder.serializeList(data: List<Any?>) {
    data.joinToStringBuilder(this,  separator = ", " ,prefix = "[", postfix = "]") {
        serializePropertyValue(it)
    }
}

// 属性名称
private inline fun StringBuilder.serializeString(name: String) {
    // like "better"
    append('\"').append("$name").append('\"')
}


fun <T> Iterable<T>.joinToStringBuilder(sb: StringBuilder, separator: CharSequence = ", ",
                                        prefix: CharSequence = "",
                                        postfix: CharSequence = "",
                                        limit: Int = -1,
                                        truncated: CharSequence = "...",
                                        transform: ((T) -> Unit)? = null): StringBuilder {
    return joinTo(sb, separator, prefix, postfix, limit, truncated) {
        if (transform == null) {    // 包装器模式
            return@joinTo it.toString()
        }
        transform.invoke(it)
        ""
    }
}


class Person1(age: Int): Apple{
    var age = age
    val isAdult: Boolean
    get() = age >= 18

    override fun print() = println("this is person1 class")
}

//密封类



interface.kt
package interFace

interface Apple{
    fun print(){
        println("hello,world")
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值