Android Kotlin 从入门到精通(五、泛型)

class demo_泛型 {
    @Test
    fun main(){
        //泛型接口调用
        val drinkApple = DrinkApple()
        drinkApple.drink("ding")

        //泛型类调用
        val blueColor = BlueColor("blue")
        blueColor.printColor()

        //泛型方法调用  传入的class参数
        fromjson<String>("{}",String::class.java)

        //泛型约束调用
        fromjson2<demo1>("{}",demo1::class.java)

        //泛型约束调用2
        fromjson3<User>("{}",User::class.java)

    }
    //1、泛型接口
    interface Drinks<T>{
        fun drink(t: T)
    }
    //实现接口
    class DrinkApple :Drinks<String>{
        override fun drink(t: String) {
            println("drink:${t}")
        }
    }
    //2、泛型类
    abstract class Color<T>(val t:T/*泛型字段*/){
        abstract fun printColor()
    }
    //实现类
    class BlueColor(val color :String):Color<String>(color){
        override fun printColor() {
            println("printColor:${color}")
        }
    }
    //3、泛型方法
    fun <T>fromjson(json:String,tClass:Class<T>):T?/*?代表可空的*/{
        val instance:T? = tClass.newInstance()
        return instance
    }
    //3、泛型限定方法 必须是demo的类或子类才能调用
    fun <T:demo1>fromjson2(json:String,tClass:Class<T>):T?/*?代表可空的*/{
        val instance:T? = tClass.newInstance()
        return instance
    }
    //4、泛型限定方法2  所传递的类型T必须同时满足 where 字句的所有条件
    //在下面的示例中,类型 T 必须即实现类 demo1 也现实了 Comparable 接口
    fun <T>fromjson3(json:String,tClass:Class<T>):T? where T:JSObject,T:Comparable<T>/*?代表可空的*/{
        val instance:T? = tClass.newInstance()
        return instance
    }
class User:JSObject(),Comparable<User>{

    override fun compareTo(other: User): Int {
        return 0
    }

    override fun call(methodName: String?, vararg args: Any?): Any {
        TODO("Not yet implemented")
    }

    override fun eval(s: String?): Any {
        TODO("Not yet implemented")
    }

    override fun getMember(name: String?): Any {
        TODO("Not yet implemented")
    }

    override fun setMember(name: String?, value: Any?) {
        TODO("Not yet implemented")
    }

    override fun removeMember(name: String?) {
        TODO("Not yet implemented")
    }

    override fun getSlot(index: Int): Any {
        TODO("Not yet implemented")
    }

    override fun setSlot(index: Int, value: Any?) {
        TODO("Not yet implemented")
    }

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值