用法都在代码中注释
package net.println.kedemo
import net.println.kedemo.Lang.*
/**
* 枚举,when,构造方法,扩展方法
* 伴生对象,kotlin的class中没有static
*/
enum class Lang(val hello: String, test: String) { //val,var是属性
ENGLISH("HELLO", "1"),
CHINESE("你好!", "1"),
JAPANESE("おはようございます", "1"),
KOREAN("안녕. 안녕하십니까", "1");
fun sayHello() {
println(hello)
// println()这里访问不到test的内容
}
init {//默认主构造方法
println(test)//这里可以访问Lang里边的所有参数
}
companion object {
//伴生对象,相当于java中的静态类和方法、常量等,在类的内部,伴随该类的生命周期
fun parse(name: String): Lang {
return valueOf(name.toUpperCase())
}
}
}
fun main(args: Array<String>) {
if (args.size == 0) return
val lang = Lang.parse(args[0])
println(lang)
lang.sayHello()
lang.sayBye()
}
/**
* 给枚举类添加扩展方法,在类的外边,用于给封装的枚举类添加额外的方法
*/
fun Lang.sayBye() {
val bye = when (this) {//代码补全alt+回车
Lang.CHINESE -> "再见"
Lang.ENGLISH -> "GoodBye"
Lang.JAPANESE -> "おはようございます"
Lang.KOREAN -> "안녕. 안녕하십니까"
}
println(bye)
}