美文网首页
kotlin 枚举类Enum

kotlin 枚举类Enum

作者: Bfmall | 来源:发表于2022-11-13 12:54 被阅读0次

    枚举类,代数类型学习笔记###

    /**
     * DESC   : 枚举类,代数类型
     */
    
    const val KtBaseEnumTest01_TAG = "KtBaseEnumTest01"
    
    /**
     * 简单枚举
     */
    enum class Week {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日
    }
    
    /**
     * 此类也使用data class,方便使用toString打印参数
     * 车门信息
     * @param whichDoor 哪一扇门
     * @param doorLength 车门长度
     */
    class CarDoorInfo(val whichDoor : String, val doorLength : Int) {
        fun showCarDoorInfo() {
            Log.d(KtBaseEnumTest01_TAG, "showCarDoorInfo==>whichDoor="+whichDoor
                +", doorLength="+doorLength)
        }
    }
    
    /**
     * 定义车门的枚举类型
     * @param carDoorInfo 此参数决定了枚举类型要不要传递参数
     * 枚举的主构造函数传参和枚举类型的传参必须保持一样,否则报错
     */
    enum class CarDoorType(var carDoorInfo: CarDoorInfo) {//枚举的主构造函数
        LEFT_FRONT_DOOR(CarDoorInfo("左前门", 80)),
        RIGHT_FRONT_DOOR(CarDoorInfo("右前门", 80)),
        LEFT_BACK_DOOR(CarDoorInfo("左后门", 100)),
        RIGHT_BACK_DOOR(CarDoorInfo("右后门", 100));//用 ; 作为结束语
    
        fun showCarDoorType() : String {
            return "whichDoor="+carDoorInfo.whichDoor +", doorLength="+carDoorInfo.doorLength
        }
    
        fun updateData(carDoorInfo: CarDoorInfo) : String {
            this.carDoorInfo = carDoorInfo
            return "updateData==>更新后的数据为 whichDoor="+this.carDoorInfo.whichDoor +", doorLength="+this.carDoorInfo.doorLength
        }
    }
    
    
    enum class Exam {
        score1, //不及格
        score2, //及格
        score3, //良好
        score4;//优秀
    }
    
    class Teacher(val exam: Exam) {
        /**
         * 显示学生考试成绩
         */
        fun showStudentExamInfo() : String {
            return when(exam) {
                Exam.score1 -> "此学生考试不及格"
                Exam.score2 -> "此学生考试及格"
                Exam.score3 -> "此学生考试良好"
                Exam.score4 -> "此学生考试优秀"
    
                /**
                 * 由于showStudentExamInfo函数是使用枚举类型来进行判断处理的,这个属于 代数数据类型,
                 * 就不需要写else了, 因为when表达式非常明确,就只有4种枚举类型,不会出现其他情况,所以不需要写else
                 */
    //            else -> ""
            }
        }
    }
    
    
    class KtBaseEnumTest01 {
        fun testEnum01() {
            //枚举的值 等价于 枚举本身
            //testEnum01==>星期三
            Log.d(KtBaseEnumTest01_TAG, "testEnum01==>"+Week.星期三)
        }
    
        fun testEnum02() {
            //一般不这么使用
            //showCarDoorInfo==>whichDoor=左前门, doorLength=80
    //        CarDoorInfo("左前门", 80).showCarDoorInfo()
    
            /**
             * 建议使用方式
             *
             * testEnum02==>whichDoor=左前门, doorLength=80
             * testEnum02==>whichDoor=右前门, doorLength=80
             * testEnum02==>whichDoor=左后门, doorLength=100
             * testEnum02==>whichDoor=右后门, doorLength=100
             */
            Log.d(KtBaseEnumTest01_TAG, "testEnum02==>"+CarDoorType.LEFT_FRONT_DOOR.showCarDoorType())
            Log.d(KtBaseEnumTest01_TAG, "testEnum02==>"+CarDoorType.RIGHT_FRONT_DOOR.showCarDoorType())
            Log.d(KtBaseEnumTest01_TAG, "testEnum02==>"+CarDoorType.LEFT_BACK_DOOR.showCarDoorType())
            Log.d(KtBaseEnumTest01_TAG, "testEnum02==>"+CarDoorType.RIGHT_BACK_DOOR.showCarDoorType())
    
            //更新枚举值
            //testEnum02==>updateData==>更新后的数据为 whichDoor=左前门, doorLength=90
            Log.d(KtBaseEnumTest01_TAG, "testEnum02==>"+CarDoorType.LEFT_FRONT_DOOR.updateData(
                CarDoorInfo("左前门", 90)))
        }
    
        /**
         * 代数数据类型
         */
        fun testEnum03() {
            Log.d(KtBaseEnumTest01_TAG, Teacher(Exam.score1).showStudentExamInfo())
            Log.d(KtBaseEnumTest01_TAG, Teacher(Exam.score2).showStudentExamInfo())
            Log.d(KtBaseEnumTest01_TAG, Teacher(Exam.score3).showStudentExamInfo())
            Log.d(KtBaseEnumTest01_TAG, Teacher(Exam.score4).showStudentExamInfo())
        }
    }
    

    相关文章

      网友评论

          本文标题:kotlin 枚举类Enum

          本文链接:https://www.haomeiwen.com/subject/gqoazrtx.html