枚举类,代数类型学习笔记###
/**
* 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())
}
}
网友评论