这几天搞 ss7.5 dz7.2 uc1.5 uchome2.0和自己主站的整合 头都大了

上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类。除了与Java共有的抽象类,Kotlin还新增了好几种特殊类,这些特殊类分别适应不同的使用场景,极大地方便了开发者的编码工作,下面就来看看Kotlin究竟提供了哪些独门秘笈。

呵呵  好歹是弄的差不多 了 呵呵 记录一下 ss7.5的数据调用

 

 

嵌套类
一个类可以在单独的代码文件中定义,也可以在另一个类内部定义,后一种情况叫做嵌套类,意即A类嵌套在B类之中。乍看过去,这个嵌套类的定义似乎与Java的嵌套类是一样的,但其实有所差别。Java的嵌套类允许访问外部类的成员,而Kotlin的嵌套类不允许访问外部类的成员。倘若Kotlin的嵌套类内部强行访问外部类的成员,则编译器会报错“Unresolved
reference:
***”,意思是找不到这个东西。下面是Kotlin定义嵌套类的代码例子:

dz 和home的 数据调用还好说 非常显眼的
管理菜单中就说的有数据调用不管是内部还是外部 数据调用 都是很好弄的 

class Tree(var treeName:String) {
    //在类内部再定义一个类,这个新类称作嵌套类
    class Flower (var flowerName:String) {
        fun getName():String {
            return "这是一朵$flowerName"
            //普通的嵌套类不能访问外部类的成员如treeName
            //否则编译器报错“Unresolved reference: ***”
            //return "这是${treeName}上的一朵$flowerName"
        }
    }
}

 

调用嵌套类时,得在嵌套类的类名前面添加外部类的类名,相当于把这个嵌套类作为外部类的静态对象使用。嵌套类的调用代码如下所示:

这里不再多说 这里只说 ss7.5的数据调用 不管是外部的 还是内部的 

    btn_class_nest.setOnClickListener {
        //使用嵌套类时,只能引用外部类的类名,不能调用外部类的构造函数
        val peachBlossom = Tree.Flower("桃花");
        tv_class_secret.text = peachBlossom.getName()
    }

一步走:

  

   图片 1

内部类
既然Kotlin限制了嵌套类不能访问外部类的成员,那还有什么办法可以实现此功能呢?针对该问题,Kotlin另外增加了关键字inner表示内部,把inner加在嵌套类的class前面,于是嵌套类华丽丽转变为了内部类,这个内部类比起嵌套类的好处,便是能够访问外部类的成员。所以,Kotlin的内部类就相当于Java的嵌套类,而Kotlin的嵌套类则是加了访问限制的内部类。按照前面演示嵌套类的树木类Tree,也给它补充内部类的定义,代码如下所示:

 二步走:

class Tree(var treeName:String) {
    //在类内部再定义一个类,这个新类称作嵌套类
    class Flower (var flowerName:String) {
        fun getName():String {
            return "这是一朵$flowerName"
            //普通的嵌套类不能访问外部类的成员如treeName
            //否则编译器报错“Unresolved reference: ***”
            //return "这是${treeName}上的一朵$flowerName"
        }
    }

    //嵌套类加上了inner前缀,就成为了内部类
    inner class Fruit (var fruitName:String) {
        fun getName():String {
            //只有声明为内部类(添加了关键字inner),才能访问外部类的成员
            return "这是${treeName}长出来的$fruitName"
        }
    }
}

    图片 2

调用内部类时,要先实例化外部类,再通过外部类的实例调用内部类的构造函数,也就是把内部类作为外部类的一个成员对象来使用,这与成员属性、成员方法的调用方法类似。内部类的调用代码如下所示:

  三步走:

    btn_class_inner.setOnClickListener {
        //使用内部类时,必须调用外部类的构造函数,否则编译器会报错
        val peach = Tree("桃树").Fruit("桃花");
        tv_class_secret.text = peach.getName()
    }

  填好你的条件 调用的模式 的条件 要填写好 呵呵

  

   图片 3

枚举类
Java有一种枚举类型,它采用关键字enum来表达,其内部定义了一系列名称,通过有意义的名字比0/1/2这些数字能更有效地表达语义。下面是个Java定义枚举类型的代码例子:

 

enum Season { SPRING,SUMMER,AUTUMN,WINTER }

最后一步 要选好 模板文件 

上面的枚举类型定义代码,看起来仿佛是一种新的数据类型,特别像枚举数组。可是枚举类型实际上是一种类,开发者在代码中创建enum类型时,编译器会自动生成一个对应的类,并且该类继承自java.lang.Enum。因此,Kotlin拨乱反正,摒弃了“枚举类型”那种模糊不清的说法,转而采取“枚举类”这种正本清源的提法。具体到编码上,则将enum作为关键字class都得修饰符,使之名正言顺地成为一个类——枚举类。按此思路将前面Java的枚举类型Season改写为Kotlin的枚举类,改写后的枚举类代码如下所示:

  图片 4

enum class SeasonType {
    SPRING,SUMMER,AUTUMN,WINTER
}

    这一步 是重要的 一定要根据条件选择好你自己的模板文件

枚举类内部的枚举变量,除了可以直接拿来赋值之外,还可以调用枚举值的几个属性获得对应的信息,例如ordinal属性用于获取该枚举值的序号,name属性用于获取该枚举值的名称。枚举变量本质上还是该类的一个实例,所以如果枚举类存在构造函数的话,枚举变量也必须调用对应的构造函数。这样做的好处是,每个枚举值不但携带唯一的名称,还可以拥有更加个性化的特征描述。比如下面的枚举类SeasonName代码,通过构造函数能够给枚举值赋予更加丰富的含义:

 

enum class SeasonName (val seasonName:String) {
    SPRING("春天"),
    SUMMER("夏天"),
    AUTUMN("秋天"),
    WINTER("冬天")
}

最后的生成的外部js代码 和内部的代码 如下

下面的代码演示了如何分别使用两个枚举类SeasonType和SeasonName:

 呵呵

    btn_class_enum.setOnClickListener {
        if (count%2 == 0) {
            //ordinal表示枚举类型的序号,name表示枚举类型的名称
            tv_class_secret.text = when (count++%4) {
                SeasonType.SPRING.ordinal -> SeasonType.SPRING.name
                SeasonType.SUMMER.ordinal -> SeasonType.SUMMER.name
                SeasonType.AUTUMN.ordinal -> SeasonType.AUTUMN.name
                SeasonType.WINTER.ordinal -> SeasonType.WINTER.name
                else -> "未知"
            }
        } else {
            tv_class_secret.text = when (count++%4) {
                //使用自定义属性seasonName表示更个性化的描述
                SeasonName.SPRING.ordinal -> SeasonName.SPRING.seasonName
                SeasonName.SUMMER.ordinal -> SeasonName.SUMMER.seasonName
                SeasonName.AUTUMN.ordinal -> SeasonName.AUTUMN.seasonName
                SeasonName.WINTER.ordinal -> SeasonName.WINTER.seasonName
                else -> "未知"
                //枚举类的构造函数是给枚举类型使用的,外部不能直接调用枚举类的构造函数
                //else -> SeasonName("未知").name
            }
        }
    }
网站地图xml地图