在代碼A中,ELevel是列舉類,fun getLevel列舉中的會通過引數回傳一個子類soundValue。
代碼 A 可以編譯。
我覺得 Code B 更好,但實際上它無法編譯,為什么?
代碼 A
data class MSoundDensity(
val avg: Double=0.0,
val max: Double=0.0,
val level: ELevel=ELevel.Whisper.getLevel(avg)
)
enum class ELevel(val label:String){
Whisper("Whisper"),
Quiet("Quiet Library");
fun getLevel(soundValue:Double):ELevel{
var temp=Whisper
val i=soundValue.toInt()
if (i in 1..20){
temp=Whisper
}
if (i in 21..40){
temp=Quiet
}
return temp
}
}
代碼 B
data class MSoundDensity(
val avg: Double=0.0,
val max: Double=0.0,
val level: ELevel=ELevel.getLevel(avg) //It cause error when I use base class.
)
//The same
uj5u.com熱心網友回復:
就像任何其他類一樣,如果您想像那樣呼叫它而不是在類的實體上呼叫它,則必須將該函式放在伴隨物件中。
enum class ELevel(val label:String){
Whisper("Whisper"),
Quiet("Quiet Library");
companion object {
fun getLevel(soundValue:Double):ELevel{
//...
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/442552.html
上一篇:奇怪的位圖閃爍
