enum class Commodity {
RICE,
BEER ,
SUGER,
}
fun main (){
val item = Commodity.valueOf("RICE")
println(item.toString())
}
// result
// RICE
fun main (){
val totalkinds= Commodity.values()
totalkinds.forEach { println(it.toString()) }
}
// result
//RICE
//BEER
//SUGER
在 Commodity 的 Constructor 中 , 宣告 property "price"
enum class Commodity ( val price : Int){
RICE(100) ,
BEER(50) ,
SUGER(30) ;
}
添加方法時需要加上分號
enum class Commodity ( val price : Int){
RICE(100) ,
BEER(50) ,
SUGER(30) ;
fun getCurrentPrice () = price
}
interface Shop {
fun CaculatePrice (amount:Int):Int
}
enum class Commodity (val price : Int):Shop{
RICE(100) ,
BEER(50) ,
SUGER(30) ;
override fun CaculatePrice (amount:Int) = price * amount
}
}
sealed class subclass 如果沒傳遞變數 , 只會是一個 單純 的 object
sealed class ResponseStatus
{
//傳遞參數
data class Success(val data : MutableList<Int> ) : ResponseStatus()
// 傳遞參數
data class Erro(val errorMessage :String ) : ResponseStatus()
// 沒傳遞參數
object Fail : ResponseStatus()
}
當在when表達式中使用密封類時,需要涵蓋所有情況, object 可以不加上 is 做判斷 (判斷一般類別需要加上 is 判斷類別)
fun getResponseStatus (status:ResponseStatus){
when (status){
is ResponseStatus.Success -> setNewdata (status.data )
is ResponseStatus.Error -> showSendInvaild (status.errorMessage)
ResponseStatus.Failure -> showSendInvaild ("請檢查網路連線")
}
}
也可以 用 if else 代替 , 只要有包含所有情況即可
fun getResult(result:ResponseStatus) {
if(status is ResponseStatus.Success) setNewdata (status.data )
if(status is ResponseStatus.Error) showSendInvaild (status.errorMessage)
else showSendInvaild ("請檢查網路連線")
}
是 abstract,不能直接實例化,可以具有 abstract member。
Constructor 是 private 不能為 public。
和他的 subclass 需要放在同一個 file
Extend Sealed class 的 subclass 的 class(間接繼承者)可以放置在任何位置,而不必放在同一 file 中。